| @@ -1 +1 @@ | |||
| import{_ as r,r as s,o as d,c as p,a as e,b as a,w as c,d as l,p as i,e as u}from"./index-F9n6oHAB.js";const h={},t=o=>(i("data-v-80d1ee2a"),o=o(),u(),o),m={class:"nopage"},f=t(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),v=t(()=>e("span",{style:{color:"#67C23A"}},"0",-1)),x=t(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),y=t(()=>e("p",null,"你页面走丢了~",-1));function b(o,k){const n=s("a-button"),_=s("router-link");return d(),p("div",m,[f,v,x,e("div",null,[y,e("p",null,[a(_,{to:"/job/home"},{default:c(()=>[a(n,{type:"primary"},{default:c(()=>[l("返回首页")]),_:1})]),_:1})])])])}const w=r(h,[["render",b],["__scopeId","data-v-80d1ee2a"]]);export{w as default}; | |||
| import{_ as r,r as s,o as d,c as p,a as e,b as a,w as c,d as l,p as i,e as u}from"./index-Ua34iPmJ.js";const h={},t=o=>(i("data-v-80d1ee2a"),o=o(),u(),o),m={class:"nopage"},f=t(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),v=t(()=>e("span",{style:{color:"#67C23A"}},"0",-1)),x=t(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),y=t(()=>e("p",null,"你页面走丢了~",-1));function b(o,k){const n=s("a-button"),_=s("router-link");return d(),p("div",m,[f,v,x,e("div",null,[y,e("p",null,[a(_,{to:"/job/home"},{default:c(()=>[a(n,{type:"primary"},{default:c(()=>[l("返回首页")]),_:1})]),_:1})])])])}const w=r(h,[["render",b],["__scopeId","data-v-80d1ee2a"]]);export{w as default}; | |||
| @@ -6,8 +6,8 @@ | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <script src="https://map.qq.com/api/gljs?v=1.exp&key=MPBBZ-HUICZ-EGRXB-7AHZI-R4GQZ-QWBSO"></script> | |||
| <title>菊城人才网</title> | |||
| <script type="module" crossorigin src="/assets/index-F9n6oHAB.js"></script> | |||
| <link rel="stylesheet" crossorigin href="/assets/index-OlZ5X-qT.css"> | |||
| <script type="module" crossorigin src="/assets/index-Ua34iPmJ.js"></script> | |||
| <link rel="stylesheet" crossorigin href="/assets/index-kUK-5M1q.css"> | |||
| </head> | |||
| <body> | |||
| <div id="app"></div> | |||
| @@ -14,7 +14,7 @@ export const PostJobseekerSmsLogin = postModel(url.JobseekerSmsLogin); | |||
| export const PostCustomerVerify = postModel(url.CustomerVerify); | |||
| export const PostJobseekerEditPwd = postModel(url.JobseekerEditPwd); | |||
| export const PostCompanyLoginByMobile = postModel(url.CompanyLoginByMobile); | |||
| export const PostJobseekerResetPwd = postModel(url.JobseekerResetPwd); | |||
| // 招聘会 | |||
| export const PostRecruitmentBookcompany = getModel(url.RecruitmentBookcompany);// 获取招聘会参与的企业 | |||
| @@ -111,6 +111,8 @@ export const GetJobCompanyjobs = getModel(url.JobCompanyjobs); // 企业当前 | |||
| export const GetJobUrgentjobs = getModel(url.JobUrgentjobs); // 急招职位 | |||
| export const GetJobHighpayjobs = getModel(url.JobHighpayjobs); // 高薪职位 | |||
| export const GetJobCampusjobs = getModel(url.JobCampusjobs); // 校园招聘 | |||
| export const GetJobAuthDetail = getModel(url.JobAuthDetail); // 获取职位详情--需登录 | |||
| // 见习基地 | |||
| export const GetCompanyProbationList = getModel(url.CompanyProbationList); // 校园招聘 | |||
| @@ -12,6 +12,7 @@ declare namespace urlType { | |||
| JobseekerEditPwd : String, | |||
| CompanyLoginByMobile: String, | |||
| Jobseekerlogin: String, | |||
| JobseekerResetPwd: String, | |||
| // 招聘会 | |||
| RecruitmentBookcompany : String, | |||
| @@ -98,6 +99,7 @@ declare namespace urlType { | |||
| JobUrgentjobs : String, | |||
| JobHighpayjobs : String, | |||
| JobCampusjobs : String, | |||
| JobAuthDetail : String, | |||
| // 招聘会企业预定 | |||
| RecruitmentbookAdd : String, | |||
| @@ -12,10 +12,10 @@ export const url : urlType.url = { | |||
| SmsSend: common + '/sms/send', // 短信验证码 | |||
| JobseekerSmsLogin: web + '/jobseeker/smslogin', // 个人登录 | |||
| Jobseekerlogin: web + '/jobseeker/login', // 个人登录 | |||
| CustomerVerify: web + '/customer/verify', // 转换为HR | |||
| CustomerVerify: web + '/jobseek/verify', // 转换为HR | |||
| JobseekerEditPwd: web + '/jobseek/edit_pwd', // 修改密码 | |||
| CompanyLoginByMobile: web + '/company/login_by_mobile', // 企业登录 | |||
| JobseekerResetPwd: web + '/jobseek/resetpwd', // 修改密码 | |||
| @@ -104,6 +104,7 @@ export const url : urlType.url = { | |||
| JobUrgentjobs: web + '/job/urgentjobs', // 急招职位 | |||
| JobHighpayjobs: web + '/job/highpayjobs', // 高薪职位 | |||
| JobCampusjobs: web + '/job/campusjobs', // 校园招聘 | |||
| JobAuthDetail: web + '/job/authdetail', // 获取职位详情--需登录 | |||
| // 招聘会企业预定 | |||
| RecruitmentbookAdd: web + '/recruitmentbook/add', // 添加 | |||
| @@ -1,23 +1,36 @@ | |||
| <template> | |||
| <img :src="imgObj.src" alt="" | |||
| :style="{width: imgObj.width,height: imgObj.height,'object-fit': imgObj.mode, 'border-radius': 0} " | |||
| @click="preImage(imgObj.src)"> | |||
| <a-modal v-model:open="imageBigOpen" centered :footer="null" @cancel="close"> | |||
| <img :src="imgObj.src" style="width: 100%; height: 100%;"> | |||
| </a-modal> | |||
| <div v-if="needPre"> | |||
| <img :src="imgObj.src" alt="" | |||
| :style="{width: imgObj.width,height: imgObj.height,'object-fit': imgObj.mode, 'border-radius': 0} " | |||
| @click="preImage(imgObj.src)"> | |||
| <a-modal v-model:open="imageBigOpen" centered :footer="null" @cancel="close"> | |||
| <img :src="imgObj.src" style="width: 100%; height: 100%;"> | |||
| </a-modal> | |||
| </div> | |||
| <div v-else> | |||
| <img :src="imgObj.src" alt="" | |||
| :style="{width: imgObj.width,height: imgObj.height,'object-fit': imgObj.mode, 'border-radius': 0} "> | |||
| </div> | |||
| </template> | |||
| <script lang="ts" setup> | |||
| import { ref, onMounted, defineProps, watch, computed } from 'vue'; | |||
| let imageBigOpen = ref<Boolean>(false) | |||
| const props = defineProps({ | |||
| imgObj: { | |||
| type: Object, | |||
| default: {} | |||
| }, | |||
| need: { | |||
| type: Boolean, | |||
| default: false | |||
| } | |||
| }); | |||
| let needPre = ref<Boolean>(props.need) | |||
| let imageBigOpen = ref<Boolean>(false) | |||
| interface imgType { | |||
| src ?: String, | |||
| width ?: Number, | |||
| @@ -1,11 +1,7 @@ | |||
| <template> | |||
| <a-affix :offset-top="90"> | |||
| <a-menu v-model:selectedKeys="selectedKeys" @click="menuClick" style="width: 100%;border-radius: 8px;" mode="inline"> | |||
| <a-menu-item v-for="(item, index) in menuList" :key="item.key">{{item.title}}</a-menu-item> | |||
| </a-menu> | |||
| </a-affix> | |||
| </template> | |||
| <script setup lang="ts"> | |||
| @@ -17,7 +17,7 @@ | |||
| <a-col span="12"> | |||
| <a-form-item label="成立日期" name="establishment_date"> | |||
| <a-date-picker v-model:value="addOtherForm.chengli_date" | |||
| @Change="establishmentDateChange" style="width: 100%;" size="large" /> | |||
| @Change="establishmentDateChange" style="width: 100%;" size="large" :disabledDate="disabledDateFront"/> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| @@ -143,6 +143,9 @@ | |||
| <a-descriptions-item label="Email">{{basic.email}}</a-descriptions-item> | |||
| <a-descriptions-item label="传真">{{basic.fax}}</a-descriptions-item> | |||
| </a-descriptions> | |||
| <a-descriptions :column="3" title="企业介绍"> | |||
| <a-descriptions-item><div v-html="basic.introduction"></div></a-descriptions-item> | |||
| </a-descriptions> | |||
| </template> | |||
| </div> | |||
| </template> | |||
| @@ -155,7 +158,7 @@ | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| import { dataForm, otherDataForm, reset } from '@/components/company/information/basic/data.ts'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal, disabledDateFront } = useCommon(); | |||
| const dayjsRef = ref(dayjs); | |||
| let props = defineProps(['form_state']); | |||
| const emit = defineEmits(); | |||
| @@ -173,11 +176,11 @@ | |||
| basic.value = res.data; | |||
| createForm.value = intersectionAlike(createForm.value, res.data) | |||
| addOtherForm.value = { | |||
| chengli_date: dayjsRef.value(res.data.establishment_date), | |||
| chengli_date: res.data.establishment_date ? dayjsRef.value(res.data.establishment_date) : '', | |||
| content: res.data.introduction, | |||
| company_address_cascader: [res.data.province, res.data.city, res.data.district, res.data.street], | |||
| company_industry_cascader: [res.data.industry, res.data.industry2], | |||
| company_nature_cascader: [res.data.nature], | |||
| company_address_cascader: res.data.province ? [res.data.province, res.data.city, res.data.district, res.data.street] : [], | |||
| company_industry_cascader: res.data.industry ? [res.data.industry, res.data.industry2] : [], | |||
| company_nature_cascader: res.data.nature ? [res.data.nature] : 0, | |||
| company_scale_cascader: res.data.scale, | |||
| } | |||
| }) | |||
| @@ -209,7 +212,7 @@ | |||
| // 企业规模 | |||
| const scaleSave = (data) => { | |||
| createForm.value.scale = data.val ? data.val : 0; | |||
| createForm.value.scale = data.val.key ? data.val.key : 0; | |||
| } | |||
| let showMap = ref<Boolean>(false); | |||
| @@ -41,23 +41,28 @@ | |||
| <template v-else> | |||
| <!-- <a-search @searchData="searchData"></a-search> --> | |||
| <a-list :data-source="departmengList"> | |||
| <template #loadMore> | |||
| <div v-if="!loading" | |||
| :style="{ textAlign: 'center', marginTop: '12px', height: '32px', lineHeight: '32px' }"> | |||
| <a-button @click="onLoadMore">加载更多</a-button> | |||
| </div> | |||
| <template #loadMore v-if="departmengList.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 }"> | |||
| <a-list-item> | |||
| <template #actions> | |||
| <a-button @click="toEdit(item)" size="small"> | |||
| 编辑 | |||
| </a-button> | |||
| <a-popconfirm title="是否删除该部门" @confirm="del(item.id)"> | |||
| <a-button size="small" danger> | |||
| 删除 | |||
| <a-space> | |||
| <a-button @click="toEdit(item)" type="primary" size="small"> | |||
| 编辑 | |||
| </a-button> | |||
| </a-popconfirm> | |||
| <a-popconfirm title="是否删除该部门" @confirm="del(item.id)"> | |||
| <a-button size="small" danger> | |||
| 删除 | |||
| </a-button> | |||
| </a-popconfirm> | |||
| </a-space> | |||
| </template> | |||
| <a-skeleton avatar :title="false" :loading="!!loading" active> | |||
| <a-list-item-meta> | |||
| @@ -19,7 +19,9 @@ | |||
| </a-form> | |||
| </template> | |||
| <template v-else> | |||
| <image-container :imgObj="{src: addOtherForm.photo_img,width: '200px',height:'280px', mode: 'fill'}"></image-container> | |||
| <div v-if="createForm.photo"> | |||
| <image-container :imgObj="{src:createForm.photo? imageprefix + createForm.photo : '/images/gongzhonghao.png',width: '200px',height:'280px', mode: 'fill'}"></image-container> | |||
| </div> | |||
| </template> | |||
| </div> | |||
| </template> | |||
| @@ -44,9 +46,9 @@ | |||
| const getBasic = () => { | |||
| PostCompanyDetailInfo().then(res => { | |||
| createForm.value.photo = res.data.photo | |||
| createForm.value.photo = res.data.photo ? res.data.photo : '' | |||
| addOtherForm.value = { | |||
| photo_img: imageprefix + res.data.photo, | |||
| photo_img: res.data.photo ? imageprefix + res.data.photo : '', | |||
| } | |||
| }) | |||
| } | |||
| @@ -19,7 +19,9 @@ | |||
| </a-form> | |||
| </template> | |||
| <template v-else> | |||
| <image-container :imgObj="{src: addOtherForm.license_img,width: '200px',height:'280px',mode: 'fill'}"></image-container> | |||
| <div v-if="createForm.license_path"> | |||
| <image-container :imgObj="{src:createForm.license_path? imageprefix + createForm.license_path : '/images/gongzhonghao.png',width: '200px',height:'280px', mode: 'fill'}"></image-container> | |||
| </div> | |||
| </template> | |||
| </div> | |||
| </template> | |||
| @@ -45,9 +47,9 @@ | |||
| const getBasic = () => { | |||
| PostCompanyDetailInfo().then(res => { | |||
| createForm.value.license_path = res.data.license_path | |||
| createForm.value.license_path = res.data.license_path ? res.data.license_path : '' | |||
| addOtherForm.value = { | |||
| license_img: imageprefix + res.data.license_path, | |||
| license_img: res.data.license_path ? imageprefix + res.data.license_path : '', | |||
| } | |||
| }) | |||
| } | |||
| @@ -7,7 +7,8 @@ | |||
| <a-row :gutter="20"> | |||
| <a-col span="12"> | |||
| <a-form-item label="是否紧急" name="urgent"> | |||
| <a-radio-group v-model:value="createForm.urgent" button-style="solid" size="large" style="width: 100%"> | |||
| <a-radio-group v-model:value="createForm.urgent" button-style="solid" size="large" | |||
| 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> | |||
| @@ -17,37 +18,37 @@ | |||
| <a-form-item label="选择部门" name="department_id"> | |||
| <a-select v-model:value="addOtherForm.department_name" @change="departmentChange" | |||
| placeholder="请进行搜索选择部门" show-search :filter-option="false" label-in-value | |||
| @search="departmentSearch" size="large"> | |||
| @search="departmentSearch" size="large"> | |||
| <a-select-option v-for="item in department_list" :key="item.id" :value="item.id" | |||
| :label="item.name" label-in-value>{{item.name}}</a-select-option> | |||
| </a-select> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="职位名称" name="name"> | |||
| <a-input v-model:value="createForm.name" placeholder="请输入职位名称" size="large"/> | |||
| <a-form-item 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 label="招聘人数" name="invite_count"> | |||
| <a-input v-model:value="createForm.invite_count" placeholder="请输入招聘人数" size="large"/> | |||
| <a-input v-model:value="createForm.invite_count" placeholder="请输入招聘人数" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="职位类别"> | |||
| <a-form-item label="职位类别"> | |||
| <a-shujilian :dict="2004" placeholder="职位类别(最多三个,多选只取前三)" @saveTreeNode="jobTypeChange" | |||
| :tree_content="createForm.job_type"></a-shujilian> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="工作区域"> | |||
| <a-form-item label="工作区域"> | |||
| <a-shujilian :dict="2009" placeholder="工作区域(最多四个,多选只取前四)" | |||
| @saveTreeNode="jobAddressChange" | |||
| :tree_content="createForm.job_location"></a-shujilian> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="24"> | |||
| <a-form-item required label="职位描述" name="describe_text"> | |||
| <a-form-item label="职位描述" name="describe_text"> | |||
| <QuillEditor theme="snow" :options="richOption" toolbar="full" | |||
| v-model:content="addOtherForm.describe_content" | |||
| @update:content="onEditorDescribeUpdate($event)" contentType="html" /> | |||
| @@ -61,27 +62,27 @@ | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="有效天数" name="useful_life"> | |||
| <a-form-item label="有效天数" name="useful_life"> | |||
| <a-input-number :min="0" type="number" v-model:value="createForm.useful_life" | |||
| placeholder="请输入有效天数" style="width: 100%;" size="large" /> | |||
| placeholder="请输入有效天数" style="width: 100%;" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="到期日期"> | |||
| <a-form-item label="到期日期"> | |||
| <a-date-picker v-model:value="addOtherForm.daoqi_date" @Change="disabledDateChange" | |||
| style="width: 100%;" size="large"/> | |||
| style="width: 100%;" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="关键词"> | |||
| <a-input v-model:value="createForm.key_word" placeholder="请输入关键词" size="large"/> | |||
| <a-input v-model:value="createForm.key_word" placeholder="请输入关键词" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="职位性质"> | |||
| <a-radio-group v-model:value="addOtherForm.job_nature" button-style="solid" | |||
| @change="jobNatureChange" style="width: 100%;" size="large"> | |||
| <a-radio-button :value="1" style="width: 20%;">全职</a-radio-button> | |||
| @change="jobNatureChange" style="width: 100%;" size="large"> | |||
| <a-radio-button :value="1" style="width: 20%;">全职</a-radio-button> | |||
| <a-radio-button :value="2" style="width: 20%;">兼职</a-radio-button> | |||
| <a-radio-button :value="3" style="width: 20%;">临时</a-radio-button> | |||
| <a-radio-button :value="4" style="width: 20%;">实习</a-radio-button> | |||
| @@ -90,13 +91,13 @@ | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="食宿要求"> | |||
| <a-form-item label="食宿要求"> | |||
| <a-xuanze :dict="2016" placeholder="请选择食宿要求" @saveSelect="saveShisu" | |||
| :select_content="addOtherForm.shisu_select"></a-xuanze> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="节假日休息情况"> | |||
| <a-form-item label="节假日休息情况"> | |||
| <a-xuanze :dict="2017" placeholder="请选择节假日休息情况" @saveSelect="saveHolidays" | |||
| :select_content="addOtherForm.holidays_select"></a-xuanze> | |||
| </a-form-item> | |||
| @@ -106,7 +107,7 @@ | |||
| <div v-show="current == 1"> | |||
| <a-row gutter="20"> | |||
| <a-col span="12"> | |||
| <a-form-item required label="工作经验"> | |||
| <a-form-item label="工作经验"> | |||
| <a-xuanze :dict="2021" placeholder="请选择工作经验" @saveSelect="saveExperience" | |||
| :select_content="createForm.experience"></a-xuanze> | |||
| </a-form-item> | |||
| @@ -118,21 +119,22 @@ | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="含最高学历" name="degree_better" style="width: 100%;" size="large"> | |||
| <a-radio-group v-model:value="createForm.degree_better" button-style="solid"> | |||
| <a-form-item label="含最高学历" name="degree_better"> | |||
| <a-radio-group v-model:value="createForm.degree_better" button-style="solid" | |||
| style="width: 100%;" size="large"> | |||
| <a-radio-button :value="1" style="width: 50%;">是</a-radio-button> | |||
| <a-radio-button :value="2" 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="职称要求"> | |||
| <a-form-item label="职称要求"> | |||
| <a-xuanze :dict="2006" placeholder="请选择职称要求" @saveSelect="saveProfelevel" | |||
| :select_content="createForm.profelevel"></a-xuanze> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="技能认证"> | |||
| <a-form-item label="技能认证"> | |||
| <a-xuanze :dict="2015" placeholder="请选择技能认证" @saveSelect="saveCertification" | |||
| :select_content="createForm.certification"></a-xuanze> | |||
| </a-form-item> | |||
| @@ -146,13 +148,14 @@ | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="掌握程度"> | |||
| <a-xuanze :dict="2007" placeholder="请选择掌握程度" @saveSelect="saveLanguageDegree" | |||
| <a-xuanze :dict="2008" placeholder="请选择掌握程度" @saveSelect="saveLanguageDegree" | |||
| :select_content="createForm.language_degree"></a-xuanze> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="性别要求" name="sex"> | |||
| <a-radio-group v-model:value="createForm.sex" button-style="solid" style="width: 100%;" size="large"> | |||
| <a-radio-group v-model:value="createForm.sex" button-style="solid" style="width: 100%;" | |||
| size="large"> | |||
| <a-radio-button :value="1" style="width: calc(100% / 3);">男</a-radio-button> | |||
| <a-radio-button :value="2" style="width: calc(100% / 3);">女</a-radio-button> | |||
| <a-radio-button :value="3" style="width: calc(100% / 3);">不限</a-radio-button> | |||
| @@ -162,19 +165,20 @@ | |||
| <a-col span="12"> | |||
| <a-form-item label="最小年龄" name="age_min"> | |||
| <a-input-number :min="0" type="number" v-model:value="createForm.age_min" | |||
| placeholder="请输入最小年龄" style="width: 100%;" size="large"/> | |||
| placeholder="请输入最小年龄" style="width: 100%;" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="最大年龄" name="age_max"> | |||
| <a-input-number :min="0" type="number" v-model:value="createForm.age_max" | |||
| placeholder="请输入最大年龄" style="width: 100%;" size="large"/> | |||
| placeholder="请输入最大年龄" style="width: 100%;" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="婚姻状况" name="marital_status"> | |||
| <a-radio-group v-model:value="createForm.marital_status" button-style="solid" style="width: 100%;" size="large"> | |||
| <a-form-item label="婚姻状况" name="marital_status"> | |||
| <a-radio-group v-model:value="createForm.marital_status" button-style="solid" | |||
| style="width: 100%;" size="large"> | |||
| <a-radio-button :value="1" style="width: calc(100% / 3);">已婚</a-radio-button> | |||
| <a-radio-button :value="2" style="width: calc(100% / 3);">未婚</a-radio-button> | |||
| <a-radio-button :value="3" style="width: calc(100% / 3);">不限</a-radio-button> | |||
| @@ -182,8 +186,8 @@ | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="专业" name="major"> | |||
| <a-input v-model:value="createForm.major" placeholder="请输入专业" size="large"/> | |||
| <a-form-item label="专业" name="major"> | |||
| <a-input v-model:value="createForm.major" placeholder="请输入专业" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| @@ -192,7 +196,7 @@ | |||
| <a-row> | |||
| <template v-for="(item, index) in licenseOption"> | |||
| <a-col span="8"> | |||
| <a-checkbox :value="item.id" size="large">{{item.name}}</a-checkbox> | |||
| <a-checkbox :value="item.id" size="large">{{item.name}}</a-checkbox> | |||
| </a-col> | |||
| </template> | |||
| </a-row> | |||
| @@ -216,36 +220,38 @@ | |||
| <div v-show="current == 2"> | |||
| <a-row gutter="20"> | |||
| <a-col span="12"> | |||
| <a-form-item required label="联系人" name="contact"> | |||
| <a-input v-model:value="createForm.contact" placeholder="请输入联系人" size="large"/> | |||
| <a-form-item label="联系人" name="contact"> | |||
| <a-input v-model:value="createForm.contact" placeholder="请输入联系人" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="担任职位" name="possession"> | |||
| <a-input v-model:value="createForm.possession" placeholder="请输入联系人职位" size="large"/> | |||
| <a-input v-model:value="createForm.possession" placeholder="请输入联系人职位" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item required label="联系电话" name="phone"> | |||
| <a-input v-model:value="createForm.phone" placeholder="请输入联系电话" size="large"/> | |||
| <a-form-item label="联系电话" name="phone"> | |||
| <a-input v-model:value="createForm.phone" placeholder="请输入联系电话" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="是否公开联系电话" name="phone_public"> | |||
| <a-radio-group v-model:value="createForm.phone_public" button-style="solid" style="width: 100%;" size="large"> | |||
| <a-radio-button :value="1" style="width: 50%;">是</a-radio-button> | |||
| <a-radio-group v-model:value="createForm.phone_public" button-style="solid" | |||
| style="width: 100%;" size="large"> | |||
| <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 label="手机" name="mobile"> | |||
| <a-input v-model:value="createForm.mobile" placeholder="请输入手机" size="large"/> | |||
| <a-input v-model:value="createForm.mobile" placeholder="请输入手机" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="是否公开手机" name="mobile_public"> | |||
| <a-radio-group v-model:value="createForm.mobile_public" button-style="solid" style="width: 100%;" size="large"> | |||
| <a-radio-group v-model:value="createForm.mobile_public" button-style="solid" | |||
| style="width: 100%;" size="large"> | |||
| <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> | |||
| @@ -253,12 +259,13 @@ | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="邮箱" name="email"> | |||
| <a-input v-model:value="createForm.email" placeholder="请输入邮箱" size="large"/> | |||
| <a-input v-model:value="createForm.email" placeholder="请输入邮箱" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="是否公开邮箱" name="email_public"> | |||
| <a-radio-group v-model:value="createForm.email_public" button-style="solid" style="width: 100%;" size="large"> | |||
| <a-radio-group v-model:value="createForm.email_public" button-style="solid" | |||
| style="width: 100%;" size="large"> | |||
| <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> | |||
| @@ -266,12 +273,13 @@ | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="传真" name="fax"> | |||
| <a-input v-model:value="createForm.fax" placeholder="请输入传真" size="large"/> | |||
| <a-input v-model:value="createForm.fax" placeholder="请输入传真" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="是否公开传真" name="fax_public"> | |||
| <a-radio-group v-model:value="createForm.fax_public" button-style="solid" style="width: 100%;" size="large"> | |||
| <a-radio-group v-model:value="createForm.fax_public" button-style="solid" | |||
| style="width: 100%;" size="large"> | |||
| <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> | |||
| @@ -279,12 +287,13 @@ | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="其他地址" name="other_address"> | |||
| <a-input v-model:value="createForm.other_address" placeholder="请输入其他地址" size="large"/> | |||
| <a-input v-model:value="createForm.other_address" placeholder="请输入其他地址" size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-form-item label="面试地址" name="interview_address"> | |||
| <a-input v-model:value="createForm.interview_address" placeholder="请输入面试地址" size="large"/> | |||
| <a-input v-model:value="createForm.interview_address" placeholder="请输入面试地址" | |||
| size="large" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="24"> | |||
| @@ -564,9 +573,9 @@ | |||
| .steps-action { | |||
| margin-top: 12px; | |||
| } | |||
| :deep(.ant-steps-item-icon) { | |||
| background-color: #4FBE70 !important; | |||
| border-color: #4FBE70 !important; | |||
| border-color: #4FBE70 !important; | |||
| } | |||
| </style> | |||
| @@ -29,11 +29,11 @@ | |||
| <StarOutlined /> | |||
| 收藏 | |||
| </a-button> | |||
| <a-button v-if="detail.favorited != 0" type="primary" @click="cancelCollect(detail.id)"> | |||
| <a-button v-if="detail.favorited != 0" type="primary" @click="cancelCollect(detail.favorited)"> | |||
| <StarOutlined /> | |||
| 取消收藏 | |||
| </a-button> | |||
| <a-button @click="applyJob(detail.id)"> | |||
| <a-button @click="applyJob(detail.id)"> | |||
| 投简历 | |||
| </a-button> | |||
| </a-sapce> | |||
| @@ -60,30 +60,34 @@ | |||
| <a-descriptions-item label="联系人">{{detail.contact.contact}}</a-descriptions-item> | |||
| <a-descriptions-item | |||
| label="职业类别">{{detail.base.types ? detail.base.types[0].name : '未知'}}</a-descriptions-item> | |||
| <a-descriptions-item label="联系电话">{{detail.contact.mobile}} <a-button size="small"> | |||
| 查看 | |||
| </a-button></a-descriptions-item> | |||
| <a-descriptions-item></a-descriptions-item> | |||
| <a-descriptions-item label="职业描述"> | |||
| <a-descriptions-item label="联系电话"> | |||
| <span v-if="detail.contact.mobile_public == 1">{{detail.contact.mobile}}</span> | |||
| <span v-else>未公开</span> | |||
| </a-descriptions-item> | |||
| <a-descriptions-item label="联系固话"> | |||
| <span v-if="detail.contact.phone_public == 1">{{detail.contact.phone}}</span> | |||
| <span v-else>未公开</span> | |||
| </a-descriptions-item> | |||
| <a-descriptions-item :span="2" label="职业描述"> | |||
| <div v-html="detail.base.describe_text"></div> | |||
| </a-descriptions-item> | |||
| </a-descriptions> | |||
| </div> | |||
| <div style="margin-top: 30px;" > | |||
| <div style="margin-top: 30px;"> | |||
| <a-descriptions :column="1" title="地图"> | |||
| <a-descriptions-item :span="24"> | |||
| <div ref="mapContainer" class="map-container"></div> | |||
| <div ref="mapJob" class="map-container"></div> | |||
| </a-descriptions-item> | |||
| </a-descriptions> | |||
| </div> | |||
| <a-login></a-login> | |||
| </template> | |||
| <script setup lang="ts"> | |||
| import { ref, computed, onMounted, defineProps, watch ,createVNode} from 'vue'; | |||
| import { GetJobDetail,PostJobseekAddfavorite, PostJobseekDelfavorite, PostJobseekAddapplication } from '@/apis/models'; | |||
| import { ref, computed, onMounted, defineProps, watch, createVNode } from 'vue'; | |||
| import { GetJobDetail, GetJobAuthDetail, PostJobseekAddfavorite, PostJobseekDelfavorite, PostJobseekAddapplication } from '@/apis/models'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal, showOtherModal1 } = useCommon(); | |||
| @@ -92,29 +96,41 @@ | |||
| let detail = ref<Object>(null) | |||
| let token = ref(sessionStorage.getItem('token') ? sessionStorage.getItem('token') : '') | |||
| let role = ref(sessionStorage.getItem('role') ? sessionStorage.getItem('role') : '') | |||
| const mapContainer = ref(null); | |||
| const mapJob = ref(null); | |||
| const getDetail = () => { | |||
| GetJobDetail({ id: job_id.value }).then(res => { | |||
| detail.value = res.data; | |||
| detail.value.latitude = 39.984104 | |||
| detail.value.longitude = 116.307503 | |||
| if (mapContainer.value) { | |||
| initMap() | |||
| } else { | |||
| console.error('地图容器元素未找到'); | |||
| } | |||
| }) | |||
| if (sessionStorage.getItem('token')) { | |||
| GetJobAuthDetail({ id: job_id.value }).then(res => { | |||
| detail.value = res.data; | |||
| if (mapJob.value && detail.value.latitude && detail.value.longitude) { | |||
| initMap() | |||
| } else { | |||
| console.error('地图容器元素未找到'); | |||
| } | |||
| }) | |||
| } else { | |||
| GetJobDetail({ id: job_id.value }).then(res => { | |||
| detail.value = res.data; | |||
| detail.value.latitude = '' | |||
| detail.value.longitude = '' | |||
| if (mapJob.value && detail.value.latitude && detail.value.longitude) { | |||
| initMap() | |||
| } else { | |||
| console.error('地图容器元素未找到'); | |||
| } | |||
| }) | |||
| } | |||
| } | |||
| const initMap = () => { | |||
| var center = new TMap.LatLng(39.984104, 116.307503);//设置中心点坐标 | |||
| let center = new TMap.LatLng(39.984104, 116.307503);//设置中心点坐标 | |||
| //初始化地图 | |||
| var map = new TMap.Map(mapContainer.value, { | |||
| let map = new TMap.Map(mapJob.value, { | |||
| center: center | |||
| }); | |||
| //创建并初始化MultiMarker | |||
| var markerLayer = new TMap.MultiMarker({ | |||
| let markerLayer = new TMap.MultiMarker({ | |||
| map: map, //指定地图容器 | |||
| //样式定义 | |||
| styles: { | |||
| @@ -131,7 +147,7 @@ | |||
| geometries: [{ | |||
| "id": "1", //点标记唯一标识,后续如果有删除、修改位置等操作,都需要此id | |||
| "styleId": 'myStyle', //指定样式id | |||
| "position": new TMap.LatLng(detail.value.latitude, detail.value.longitude), //点标记坐标位置 | |||
| "position": new TMap.LatLng(sessionStorage.getItem('lat'), sessionStorage.getItem('lng')), //点标记坐标位置 | |||
| "properties": {//自定义属性 | |||
| "title": "marker1" | |||
| } | |||
| @@ -139,71 +155,71 @@ | |||
| ] | |||
| }); | |||
| } | |||
| const toLogin = () => { | |||
| showOtherModal1() | |||
| } | |||
| const confirmCollect = (job_id : Number) => { | |||
| Modal.confirm({ | |||
| title: `是否要收藏该职位`, | |||
| centered: true, | |||
| icon: createVNode(ExclamationCircleOutlined), | |||
| onOk() { | |||
| PostJobseekAddfavorite({job_id: job_id }).then(res => { | |||
| PostJobseekAddfavorite({ job_id: job_id }).then(res => { | |||
| successToast('已收藏') | |||
| mapContainer.value = null | |||
| mapJob.value = null | |||
| getDetail(); | |||
| }) | |||
| }, | |||
| onCancel() { | |||
| }, | |||
| }); | |||
| } | |||
| const cancelCollect = (job_id : Number) => { | |||
| const cancelCollect = (id : Number) => { | |||
| Modal.confirm({ | |||
| title: `是否要取消收藏该职位`, | |||
| centered: true, | |||
| icon: createVNode(ExclamationCircleOutlined), | |||
| onOk() { | |||
| PostJobseekDelfavorite({job_id: job_id }).then(res => { | |||
| PostJobseekDelfavorite({ id: id }).then(res => { | |||
| successToast('已取消收藏') | |||
| mapContainer.value = null | |||
| mapJob.value = null | |||
| getDetail(); | |||
| }) | |||
| }, | |||
| onCancel() { | |||
| }, | |||
| }); | |||
| } | |||
| const applyJob = (job_id : Number) => { | |||
| Modal.confirm({ | |||
| title: `是否要投递该职位`, | |||
| centered: true, | |||
| icon: createVNode(ExclamationCircleOutlined), | |||
| onOk() { | |||
| PostJobseekAddapplication({job_id: job_id }).then(res => { | |||
| PostJobseekAddapplication({ job_id: job_id }).then(res => { | |||
| successToast('已投递') | |||
| mapContainer.value = null | |||
| mapJob.value = null | |||
| getDetail(); | |||
| }) | |||
| }, | |||
| onCancel() { | |||
| }, | |||
| }); | |||
| } | |||
| watch(() => props.id, (newVal) => { | |||
| job_id.value = newVal | |||
| if (job_id.value) { | |||
| mapContainer.value = null | |||
| mapJob.value = null | |||
| getDetail() | |||
| } | |||
| }, { immediate: true }) | |||
| @@ -213,7 +229,7 @@ | |||
| :deep(.ant-btn) { | |||
| border-radius: 0 !important; | |||
| } | |||
| .map-container { | |||
| width: 100%; | |||
| height: 400px; | |||
| @@ -184,7 +184,8 @@ | |||
| background-color: #4FBE70; | |||
| transform: rotate(10deg); | |||
| position: absolute; | |||
| top: 4px | |||
| top: 4px; | |||
| left: 4px; | |||
| } | |||
| .text-content { | |||
| @@ -11,41 +11,56 @@ | |||
| </a-card-meta> | |||
| <a-divider /> | |||
| <div v-html="detail.content"></div> | |||
| <div class="company-box"> | |||
| <a-typography> | |||
| <a-typography-title :level="5">参与的企业</a-typography-title> | |||
| <a-typography-paragraph> | |||
| <a-row :gutter="[10,10]"> | |||
| <a-col v-for="(item, index) in companyList"> | |||
| <div style="color: #808080" @click="toCompanyDetail(item.id)">{{item.company_name}}</div> | |||
| </a-col> | |||
| </a-row> | |||
| </a-typography-paragraph> | |||
| </a-typography> | |||
| </div> | |||
| </a-card> | |||
| </a-page-header> | |||
| </template> | |||
| <template v-else> | |||
| <a-list item-layout="horizontal" :data-source="recruitmentList" style="cursor: pointer;"> | |||
| <template #renderItem="{ item }"> | |||
| <a-list-item @click="toDetail(item)" > | |||
| <a-list-item @click="toDetail(item)"> | |||
| <a-list-item-meta :title="item.title" :description="'发布时间:'+item.created_at"> | |||
| </a-list-item-meta> | |||
| </a-list-item> | |||
| </template> | |||
| </a-list> | |||
| <a-flex align="center" justify="center"> | |||
| <a-pagination hideOnSinglePage v-model:current="current" | |||
| :total="total" @change="pageChange" /> | |||
| <a-pagination hideOnSinglePage v-model:current="current" :total="total" @change="pageChange" /> | |||
| </a-flex> | |||
| </template> | |||
| </template> | |||
| <script setup lang="ts"> | |||
| import { ref, computed, onMounted, createVNode } from 'vue'; | |||
| import { PostRecruitmentList } from '@/apis/models'; | |||
| import { ref, computed, onMounted ,defineEmits} from 'vue'; | |||
| import { PostRecruitmentList, PostRecruitmentBookcompany } from '@/apis/models'; | |||
| import { ArrowLeftOutlined } from '@ant-design/icons-vue'; | |||
| import { router } from '@/router'; | |||
| const emit = defineEmits(); | |||
| let recruitmentList = ref<object[]>([]) | |||
| let detail = ref<Object>(null) | |||
| let current = ref<Number>(1) | |||
| let total = ref<Number>(0) | |||
| let companyList = ref<Object>([]) | |||
| const pageChange = (page) => { | |||
| current.value = page | |||
| getRecruitmentList() | |||
| } | |||
| const getRecruitmentList = (page) => { | |||
| PostRecruitmentList({page: current.value}).then(res => { | |||
| PostRecruitmentList({ page: current.value }).then(res => { | |||
| recruitmentList.value = res.data.recruitments; | |||
| total.value = res.data.total; | |||
| }) | |||
| @@ -57,13 +72,31 @@ | |||
| const toDetail = (data) => { | |||
| detail.value = data | |||
| PostRecruitmentBookcompany({ pagesize: 100, recruitment_id: data.id }).then(res => { | |||
| companyList.value = res.data.recruitmentbooks | |||
| }) | |||
| } | |||
| const toCompanyDetail = (val : Number) => { | |||
| sessionStorage.setItem('tab_key', 1) | |||
| sessionStorage.setItem('pubilc_id', val) | |||
| sessionStorage.setItem('mode', 'detail') | |||
| router.push({ | |||
| path: '/personal' | |||
| }) | |||
| } | |||
| const back = (data) => { | |||
| detail.value = null | |||
| } | |||
| </script> | |||
| <style> | |||
| <style lang="less" scoped> | |||
| .company-box { | |||
| width: 100%; | |||
| padding: 20px; | |||
| cursor: pointer; | |||
| border: 1px solid #f0f0f0; | |||
| border-radius: 8px; | |||
| } | |||
| </style> | |||
| @@ -11,7 +11,7 @@ | |||
| <a-col span="8" v-for="(item, index) in jobList"> | |||
| <a-card :title="item.job_name"> | |||
| <template #extra> | |||
| <a-button @click="cancelCollect(item.id,item.job_id)">取消收藏</a-button> | |||
| <a-button @click="cancelCollect(item.id,item.job_id)" type="primary">取消收藏</a-button> | |||
| </template> | |||
| <a-row> | |||
| <a-col span="20"> | |||
| @@ -37,7 +37,7 @@ | |||
| <script setup lang="ts"> | |||
| import { ref, computed, onMounted, defineEmits, createVNode } from 'vue'; | |||
| import { GetJobseekListfavorite, PostJobseekUpdatefavorite } from '@/apis/models'; | |||
| import { GetJobseekListfavorite, PostJobseekDelfavorite } from '@/apis/models'; | |||
| import JobDetail from '@/components/jobseeker/invite/detail/index.vue' | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| @@ -98,7 +98,7 @@ | |||
| centered: true, | |||
| icon: createVNode(ExclamationCircleOutlined), | |||
| onOk() { | |||
| PostJobseekUpdatefavorite({ id: id, job_id: job_id }).then(res => { | |||
| PostJobseekDelfavorite({ id: id, job_id: job_id }).then(res => { | |||
| successToast('已取消收藏') | |||
| getData(); | |||
| }) | |||
| @@ -45,7 +45,7 @@ | |||
| <a-col span="12"> | |||
| <a-form-item label="出生日期" name="dob"> | |||
| <a-date-picker v-model:value="addOtherForm.dob" @Change="dobChange" style="width: 100%;" | |||
| size="large" /> | |||
| size="large" :disabledDate="disabledDateFront" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| @@ -221,7 +221,7 @@ | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| import { dataForm, otherDataForm, reset } from '@/components/jobseeker/resume/basic/data.ts'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal, imageprefix } = useCommon(); | |||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal, imageprefix, disabledDateFront } = useCommon(); | |||
| const dayjsRef = ref(dayjs); | |||
| let props = defineProps(['form_state']); | |||
| const emit = defineEmits(); | |||
| @@ -305,13 +305,21 @@ | |||
| warnToast('请输入验证码') | |||
| return; | |||
| } else { | |||
| successToast('已经成为招聘者,请重新登录') | |||
| quit() | |||
| router.push('/login') | |||
| // PostCustomerVerify(form.value).then(res => { | |||
| // successToast('已经成为招聘者,请重新登录') | |||
| // quit() | |||
| // }) | |||
| form.value.code = Number(form.value.code) | |||
| PostCustomerVerify(form.value).then(res => { | |||
| successToast('已经成为招聘者,请重新登录') | |||
| store.commit('getPageType', { | |||
| pageType: '' | |||
| }) | |||
| store.commit('setShowLoginBox', { | |||
| showLoginBox: false | |||
| }) | |||
| sessionStorage.clear() | |||
| sessionStorage.setItem('pageType', '') | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| router.push('/login') | |||
| }) | |||
| } | |||
| } | |||
| @@ -113,11 +113,23 @@ | |||
| :deep(.ant-menu-submenu-open) { | |||
| color: #4FBE70 !important; | |||
| background-color: #ffffff !important; | |||
| color: #ffffff !important; | |||
| background-color: #0A130D !important; | |||
| border-bottom-color: #4FBE70 !important; | |||
| } | |||
| :deep(.ant-menu-submenu-title:hover) { | |||
| color: #ffffff !important; | |||
| } | |||
| :deep(.ant-menu-submenu-active::after) { | |||
| color: #ffffff !important; | |||
| background-color: #4FBE70 !important; | |||
| border-bottom-color: #4FBE70 !important; | |||
| } | |||
| @@ -138,6 +138,10 @@ export const useCommon = () => { | |||
| const disabledDate = (val : Dayjs) => { | |||
| return val && val < dayjs().endOf('day'); | |||
| }; | |||
| const disabledDateFront = (val : Dayjs) => { | |||
| return val && val > dayjs().endOf('day'); | |||
| }; | |||
| // 照片前缀 | |||
| // const imageprefix : string = 'https://admin1.jcjob.cn/img/' | |||
| @@ -159,6 +163,7 @@ export const useCommon = () => { | |||
| richOption, | |||
| message, | |||
| disabledDate, | |||
| disabledDateFront, | |||
| imageprefix, | |||
| openSearchModel, | |||
| showSearch, | |||
| @@ -114,9 +114,11 @@ button:focus-visible { | |||
| .ant-btn-primary { | |||
| background-color: #4FBE70 !important; | |||
| box-shadow: 0 2px 0 rgba(79, 190, 112, 0.1)important; | |||
| border-color: #4FBE70 !important; | |||
| } | |||
| .ant-menu-submenu-selected::after { | |||
| border-bottom-color: #4FBE70 !important; | |||
| } | |||
| @@ -22,7 +22,7 @@ | |||
| </a-row> | |||
| </template> | |||
| <script setup lang="ts"> | |||
| import { ref, onMounted, computed, watch } from 'vue'; | |||
| import { ref, onMounted, computed, watch, onBeforeUnmount } from 'vue'; | |||
| import Download from '@/components/download/index.vue' | |||
| let menu_list = ref([{ title: '个人求职', key: 10 },{ title: '企业招聘', key: 11},{ title: '应届毕业生', key: 12},{ title: '人才入户', key: 13},{ title: '其他下载', key: 14}]) | |||
| let curKey = ref<Number>(10) | |||
| @@ -30,6 +30,17 @@ | |||
| const changeKey = (data) => { | |||
| curKey.value = data.key; | |||
| } | |||
| onMounted(() => { | |||
| if (sessionStorage.getItem('section_id')) { | |||
| selectedKeys.value = [sessionStorage.getItem('section_id')] | |||
| } | |||
| }) | |||
| onBeforeUnmount(() => { | |||
| sessionStorage.removeItem('section_id') | |||
| sessionStorage.removeItem('acticle_id') | |||
| }) | |||
| </script> | |||
| <style> | |||
| @@ -22,7 +22,7 @@ | |||
| </a-row> | |||
| </template> | |||
| <script setup lang="ts"> | |||
| import { ref, onMounted, computed, watch } from 'vue'; | |||
| import { ref, onMounted, computed, watch ,onBeforeUnmount} from 'vue'; | |||
| import WebsiteNotice from '@/components/information/website-notice/index.vue' | |||
| let menu_list = ref([{ title: '本站公告', key: 3 },{ title: '小榄动态', key: 4},{ title: '职场攻略', key: 5},{ title: '创业就业', key: 6},{ title: '劳动与法', key: 8}]) | |||
| let curKey = ref<Number>(3) | |||
| @@ -30,6 +30,17 @@ | |||
| const changeKey = (data) => { | |||
| curKey.value = data.key; | |||
| } | |||
| onMounted(() => { | |||
| if (sessionStorage.getItem('section_id')) { | |||
| selectedKeys.value = [sessionStorage.getItem('section_id')] | |||
| } | |||
| }) | |||
| onBeforeUnmount(() => { | |||
| sessionStorage.removeItem('section_id') | |||
| sessionStorage.removeItem('acticle_id') | |||
| }) | |||
| </script> | |||
| <style> | |||
| @@ -22,7 +22,7 @@ | |||
| </a-list-item> | |||
| </a-list> | |||
| <a-tabs v-model:activeKey="activeKey" type="card"> | |||
| <a-tabs v-model:activeKey="activeKey" type="card" @change="activeChange"> | |||
| <a-tab-pane :key="1" tab="企业信息"> | |||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <a-descriptions title="公司介绍" layout="vertical"> | |||
| @@ -57,7 +57,7 @@ | |||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <a-descriptions :column="7" title="企业相册" layout="vertical"> | |||
| <a-descriptions-item><image-container | |||
| :imgObj="{src: imageprefix + companyDetail.photo,width: '153px',height:'50px'}"></image-container></a-descriptions-item> | |||
| :imgObj="{src: imageprefix + companyDetail.photo,width: '200px',height:'200px', mode: 'fill'}"></image-container></a-descriptions-item> | |||
| </a-descriptions> | |||
| </div> | |||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| @@ -83,8 +83,8 @@ | |||
| <job-card :list="jobList" @detail="toDetail"></job-card> | |||
| <a-flex justify="center"> | |||
| <a-space> | |||
| <a-pagination simple v-model:current="current" | |||
| :total="total" @change="pageChange" /> | |||
| <a-pagination simple v-model:current="current" :total="total" | |||
| @change="pageChange" /> | |||
| </a-space> | |||
| </a-flex> | |||
| <!-- <a-card hoverable :bordered="false" style="width: 100%"> | |||
| @@ -98,11 +98,10 @@ | |||
| </template> | |||
| </a-card> --> | |||
| </div> | |||
| </a-col> | |||
| <a-col span="18"> | |||
| <div v-if="job_id" | |||
| style="padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <div v-if="job_id" style="padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <job-detail :id="job_id"></job-detail> | |||
| </div> | |||
| </a-col> | |||
| @@ -143,9 +142,9 @@ | |||
| const toDetail = (data) => { | |||
| job_id.value = data.id; | |||
| } | |||
| const pageChange = (page) => { | |||
| current.value = page | |||
| getJobCompanyjobs(page) | |||
| @@ -190,7 +189,6 @@ | |||
| var map = new TMap.Map(mapContainer.value, { | |||
| center: center | |||
| }); | |||
| //创建并初始化MultiMarker | |||
| var markerLayer = new TMap.MultiMarker({ | |||
| map: map, //指定地图容器 | |||
| @@ -216,8 +214,6 @@ | |||
| } | |||
| ] | |||
| }); | |||
| } | |||
| @@ -229,16 +225,12 @@ | |||
| if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) { | |||
| PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => { | |||
| companyDetail.value = res.data; | |||
| companyDetail.value.latitude = 39.984104 | |||
| companyDetail.value.longitude = 116.307503 | |||
| if (mapContainer.value) { | |||
| initMap() | |||
| } else { | |||
| console.error('地图容器元素未找到'); | |||
| } | |||
| initMap() | |||
| }) | |||
| getJobCompanyjobs(current.value) | |||
| } | |||
| } else { | |||
| initMap() | |||
| } | |||
| }) | |||
| @@ -257,13 +249,13 @@ | |||
| .map-container { | |||
| width: 100%; | |||
| height: 400px; | |||
| height: 600px; | |||
| } | |||
| :deep(.ant-card) { | |||
| padding: 0 !important; | |||
| } | |||
| :deep(.ant-card-body) { | |||
| padding: 0 !important; | |||
| } | |||
| @@ -5,14 +5,13 @@ | |||
| <a-row :gutter="20"> | |||
| <a-col span="4"> | |||
| <div style="position: fixed; top: 90px; z-index:99;"> | |||
| <a-anchor :get-container="getContainer" :target-offset="50" :items="menu_list" | |||
| <a-anchor style="width: 210px !important;" :get-container="getContainer" :target-offset="50" :items="menu_list" | |||
| @click="anchorClick"></a-anchor> | |||
| </div> | |||
| </a-col> | |||
| <a-col span="20"> | |||
| <div style="width: 100%;background-color: #fff;padding: 0 20px;border-radius: 8px;"> | |||
| <div ref="abc" class="abc" style="height: calc(100vh - 100px);overflow: auto;"> | |||
| <div ref="abc" class="abc" style="height: 100vh;overflow: auto;"> | |||
| <a-space direction="vertical" justify="space-between" :size="36" | |||
| style="width: 100% !important;"> | |||
| <div id="basic"> | |||
| @@ -62,7 +62,7 @@ | |||
| </template> | |||
| <a-list-item-meta> | |||
| <template #title> | |||
| <a-button type="link" @click="detail(item)">{{item.seekername}}</a-button> | |||
| <div @click="detail(item)"> <span style="font-weight: bold;font-size: 16px;cursor: pointer;">{{item.seekername}} </span></div> | |||
| </template> | |||
| <template #description> | |||
| <div> | |||
| @@ -82,8 +82,7 @@ | |||
| </template> | |||
| <template #avatar> | |||
| <image-container | |||
| :imgObj="{src: '/images/onlylogo.jpg',width: '48px',height:'48px'}"></image-container> | |||
| :imgObj="{src: item.photo ? imageprefix+ item.photo : '/images/onlylogo.jpg',width: '48px',height:'48px'}"></image-container> | |||
| </template> | |||
| </a-list-item-meta> | |||
| </a-list-item> | |||
| @@ -92,7 +91,7 @@ | |||
| </a-col> | |||
| <a-col span="24" v-if="jobList.length > 0"> | |||
| <a-flex justify="center"> | |||
| <a-button size="large" class="main-color" @click="more">查看更多</a-button> | |||
| <a-button size="large" type="primary" @click="onLoadMore">查看更多</a-button> | |||
| </a-flex> | |||
| </a-col> | |||
| </a-row> | |||
| @@ -124,7 +123,7 @@ | |||
| import { PostCompanyProfile, GetCompanyRecommentResume, PostCompanyTalentPoolAdd, PostCompanyResumeInterviewAdd ,PostCompanyJobList} from '@/apis/models'; | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| let { commomParams, ExclamationCircleOutlined, Modal, dayjs, disabledDate, showOtherModal1 } = useCommon(); | |||
| let { commomParams, ExclamationCircleOutlined, Modal, dayjs, disabledDate, showOtherModal1 , imageprefix} = useCommon(); | |||
| const dayjsRef = ref(dayjs); | |||
| let jobList = ref<Object[]>([]) | |||
| let basic = ref<Object>({}) | |||
| @@ -168,7 +167,6 @@ | |||
| }) | |||
| } | |||
| const positionChange = (val : Object) => { | |||
| debugger | |||
| position_name.value = val.option.label; | |||
| form.job_id = Number(val.key); | |||
| } | |||
| @@ -18,7 +18,7 @@ | |||
| </div> | |||
| </template> | |||
| <template #avatar> | |||
| <a-avatar :src="'https://rcsc-test.jcjob.cn/img'+basic.photo" :size="96" /> | |||
| <a-avatar :src="imageprefix+basic.photo" :size="96" /> | |||
| </template> | |||
| </a-list-item-meta> | |||
| <div style="margin-left: 108px;"> | |||
| @@ -60,7 +60,7 @@ | |||
| </a-descriptions-item> | |||
| <a-descriptions-item :span="3" label="关注公众号,接收面试消息"> | |||
| <image-container | |||
| :imgObj="{src: '/images/gongzhonghao.png',width: '50px',height:'50px'}"></image-container> | |||
| :imgObj="{src: '/images/gongzhonghao.png',width: '50px',height:'50px'}" :need="true"></image-container> | |||
| </a-descriptions-item> | |||
| </a-descriptions> | |||
| </div> | |||
| @@ -100,7 +100,7 @@ | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| import { EditOutlined, FileSearchOutlined, RedoOutlined } from '@ant-design/icons-vue'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| let { commomParams, ExclamationCircleOutlined, Modal, onMenu, showOtherModal1 } = useCommon(); | |||
| let { commomParams, ExclamationCircleOutlined, Modal, onMenu, showOtherModal1, imageprefix } = useCommon(); | |||
| let jobList = ref<Object[]>([]) | |||
| let basic = ref<Object>({}) | |||
| let seeLength = ref<Number>(0) | |||
| @@ -63,7 +63,7 @@ | |||
| <script setup lang="ts"> | |||
| import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | |||
| import { PostJobseekerEditPwd, PostSmsSend, GetCaptcha } from '@/apis/models'; | |||
| import { PostJobseekerEditPwd, PostSmsSend, GetCaptcha, PostJobseekerResetPwd } from '@/apis/models'; | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| let smsForm = ref<Object>({ | |||
| mobile: "", | |||
| @@ -71,8 +71,9 @@ | |||
| capt_id: "" | |||
| }) | |||
| let createForm = ref({ | |||
| mobile: '', | |||
| sms_code: '', | |||
| new_password: '', | |||
| new_pwd: '', | |||
| }) | |||
| let capt_id = ref<String>('') | |||
| @@ -128,13 +129,18 @@ | |||
| const saveForm = () => { | |||
| PostJobseekerEditPwd(createForm.value).then(res => { | |||
| successToast('修改成功') | |||
| PostJobseekerResetPwd(createForm.value).then(res => { | |||
| successToast('重置成功') | |||
| resetForm() | |||
| }) | |||
| } | |||
| const resetForm = () => { | |||
| smsForm.value = { | |||
| mobile: "", | |||
| captcha: "", | |||
| capt_id: "" | |||
| } | |||
| createForm.value = { | |||
| sms_code: '', | |||
| new_password: '', | |||
| @@ -30,7 +30,7 @@ | |||
| </a-col> | |||
| <template v-if="loginMethod == 'password'"> | |||
| <a-col span="24"> | |||
| <a-input v-model:value="createForm.password" placeholder="密码" size="large" /> | |||
| <a-input-password v-model:value="createForm.password" placeholder="密码" size="large" /> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-input v-model:value="createForm.captcha" placeholder="验证码" size="large" /> | |||
| @@ -81,10 +81,10 @@ | |||
| </a-col> | |||
| <template v-if="registerSegmentedValue == '求职者注册'"> | |||
| <a-col span="24"> | |||
| <a-input v-model:value="personalForm.mobile" placeholder="请输入手机号" size="large" /> | |||
| <a-input v-model:value="personalForm.mobile" placeholder="手机号" size="large" /> | |||
| </a-col> | |||
| <a-col span="24"> | |||
| <a-input-password v-model:value="personalForm.password" placeholder="请输入密码" size="large" /> | |||
| <a-input-password v-model:value="personalForm.password" placeholder="密码" size="large" /> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-input v-model:value="personalForm.captcha" placeholder="验证码" size="large" /> | |||
| @@ -96,26 +96,26 @@ | |||
| </template> | |||
| <template v-if="registerSegmentedValue == '企业注册'"> | |||
| <a-col span="24"> | |||
| <a-input v-model:value="companyForm.contact_mobile" placeholder="请输入联系号码" size="large" /> | |||
| <a-input v-model:value="companyForm.contact_mobile" placeholder="联系号码" size="large" /> | |||
| </a-col> | |||
| <a-col span="24"> | |||
| <a-input-password v-model:value="companyForm.password" placeholder="请输入密码" size="large" /> | |||
| <a-input-password v-model:value="companyForm.password" placeholder="密码" size="large" /> | |||
| </a-col> | |||
| <a-col span="24"> | |||
| <a-input-password v-model:value="companyForm.comform_password" placeholder="请输入确认密码" | |||
| <a-input-password v-model:value="companyForm.comform_password" placeholder="确认密码" | |||
| size="large" /> | |||
| </a-col> | |||
| <a-col span="24"> | |||
| <a-input v-model:value="companyForm.email" placeholder="请输入邮箱" size="large" /> | |||
| <a-input v-model:value="companyForm.email" placeholder="邮箱" size="large" /> | |||
| </a-col> | |||
| <a-col span="24"> | |||
| <a-input v-model:value="companyForm.full_name" placeholder="请输入企业名称" size="large" /> | |||
| <a-input v-model:value="companyForm.full_name" placeholder="企业名称" size="large" /> | |||
| </a-col> | |||
| <a-col span="24"> | |||
| <a-input v-model:value="companyForm.contact_name" placeholder="请输入联系人" size="large" /> | |||
| <a-input v-model:value="companyForm.contact_name" placeholder="联系人" size="large" /> | |||
| </a-col> | |||
| <a-col span="24"> | |||
| <a-input v-model:value="companyForm.contact_phone" placeholder="请输入联系固话" size="large" /> | |||
| <a-input v-model:value="companyForm.contact_phone" placeholder="联系固话" size="large" /> | |||
| </a-col> | |||
| <a-col span="12"> | |||
| <a-input v-model:value="companyForm.captcha" placeholder="验证码" size="large" /> | |||
| @@ -141,7 +141,7 @@ | |||
| <script lang="ts" setup> | |||
| import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | |||
| import { GetCaptcha, PostJobseekerlogin,PostCompanyLogin, PostSmsSend, PostJobseekerSmsLogin, PostCompanyLoginByMobile} from '@/apis/models'; | |||
| import { GetCaptcha, PostJobseekerlogin,PostCompanyLogin, PostSmsSend, PostJobseekerSmsLogin, PostCompanyLoginByMobile, PostJobseekerRegister, PostCompanyRegister} from '@/apis/models'; | |||
| import { store } from '@/store/index'; | |||
| import { router } from '@/router/index'; | |||
| import { dataForm, otherDataForm, personalDataForm, companyDataForm, smsDataForm, smsLoginDataForm, reset } from '@/views/login/data.ts'; | |||
| @@ -175,11 +175,11 @@ | |||
| smsForm.value.mobile = createForm.value.username ? createForm.value.username : ''; | |||
| smsForm.value.capt_id = capt_id.value; | |||
| if (!smsForm.value.mobile) { | |||
| warnToast('请输入手机号') | |||
| warnToast('手机号') | |||
| return false; | |||
| } | |||
| if (!smsForm.value.captcha) { | |||
| warnToast('请输入图形验证码') | |||
| warnToast('图形验证码') | |||
| return false; | |||
| } | |||
| PostSmsSend(smsForm.value).then(res => { | |||
| @@ -363,7 +363,36 @@ | |||
| } | |||
| // 进入注册 | |||
| // register | |||
| const register = () => { | |||
| if(registerSegmentedValue.value == '求职者注册') { | |||
| personalForm.value.capt_id = capt_id.value; | |||
| PostJobseekerRegister(personalForm.value).then(res => { | |||
| successToast('注册成功,可以进行登录'); | |||
| resetForm() | |||
| currentModule.value = 'login'; | |||
| loginSegmentedValue.value = '我要求职' | |||
| loginMethod.value = 'password' | |||
| }).catch(err => { | |||
| getCaptcha() | |||
| }) | |||
| } else { | |||
| companyForm.value.capt_id = capt_id.value; | |||
| if (companyForm.value.password != companyForm.value.comform_password) { | |||
| warnToast('两次密码不一致'); | |||
| return false | |||
| } | |||
| PostCompanyRegister(companyForm.value).then(res => { | |||
| successToast('注册成功,可以进行登录'); | |||
| resetForm() | |||
| currentModule.value = 'login'; | |||
| loginSegmentedValue.value = '我要招聘' | |||
| loginMethod.value = 'password' | |||
| }).catch(err => { | |||
| getCaptcha() | |||
| }) | |||
| } | |||
| } | |||
| onMounted(() => { | |||