| 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}; |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | <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> | <script src="https://map.qq.com/api/gljs?v=1.exp&key=MPBBZ-HUICZ-EGRXB-7AHZI-R4GQZ-QWBSO"></script> | ||||
| <title>菊城人才网</title> | <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> | </head> | ||||
| <body> | <body> | ||||
| <div id="app"></div> | <div id="app"></div> |
| export const PostCustomerVerify = postModel(url.CustomerVerify); | export const PostCustomerVerify = postModel(url.CustomerVerify); | ||||
| export const PostJobseekerEditPwd = postModel(url.JobseekerEditPwd); | export const PostJobseekerEditPwd = postModel(url.JobseekerEditPwd); | ||||
| export const PostCompanyLoginByMobile = postModel(url.CompanyLoginByMobile); | export const PostCompanyLoginByMobile = postModel(url.CompanyLoginByMobile); | ||||
| export const PostJobseekerResetPwd = postModel(url.JobseekerResetPwd); | |||||
| // 招聘会 | // 招聘会 | ||||
| export const PostRecruitmentBookcompany = getModel(url.RecruitmentBookcompany);// 获取招聘会参与的企业 | export const PostRecruitmentBookcompany = getModel(url.RecruitmentBookcompany);// 获取招聘会参与的企业 | ||||
| export const GetJobUrgentjobs = getModel(url.JobUrgentjobs); // 急招职位 | export const GetJobUrgentjobs = getModel(url.JobUrgentjobs); // 急招职位 | ||||
| export const GetJobHighpayjobs = getModel(url.JobHighpayjobs); // 高薪职位 | export const GetJobHighpayjobs = getModel(url.JobHighpayjobs); // 高薪职位 | ||||
| export const GetJobCampusjobs = getModel(url.JobCampusjobs); // 校园招聘 | export const GetJobCampusjobs = getModel(url.JobCampusjobs); // 校园招聘 | ||||
| export const GetJobAuthDetail = getModel(url.JobAuthDetail); // 获取职位详情--需登录 | |||||
| // 见习基地 | // 见习基地 | ||||
| export const GetCompanyProbationList = getModel(url.CompanyProbationList); // 校园招聘 | export const GetCompanyProbationList = getModel(url.CompanyProbationList); // 校园招聘 |
| JobseekerEditPwd : String, | JobseekerEditPwd : String, | ||||
| CompanyLoginByMobile: String, | CompanyLoginByMobile: String, | ||||
| Jobseekerlogin: String, | Jobseekerlogin: String, | ||||
| JobseekerResetPwd: String, | |||||
| // 招聘会 | // 招聘会 | ||||
| RecruitmentBookcompany : String, | RecruitmentBookcompany : String, | ||||
| JobUrgentjobs : String, | JobUrgentjobs : String, | ||||
| JobHighpayjobs : String, | JobHighpayjobs : String, | ||||
| JobCampusjobs : String, | JobCampusjobs : String, | ||||
| JobAuthDetail : String, | |||||
| // 招聘会企业预定 | // 招聘会企业预定 | ||||
| RecruitmentbookAdd : String, | RecruitmentbookAdd : String, |
| SmsSend: common + '/sms/send', // 短信验证码 | SmsSend: common + '/sms/send', // 短信验证码 | ||||
| JobseekerSmsLogin: web + '/jobseeker/smslogin', // 个人登录 | JobseekerSmsLogin: web + '/jobseeker/smslogin', // 个人登录 | ||||
| Jobseekerlogin: web + '/jobseeker/login', // 个人登录 | Jobseekerlogin: web + '/jobseeker/login', // 个人登录 | ||||
| CustomerVerify: web + '/customer/verify', // 转换为HR | |||||
| CustomerVerify: web + '/jobseek/verify', // 转换为HR | |||||
| JobseekerEditPwd: web + '/jobseek/edit_pwd', // 修改密码 | JobseekerEditPwd: web + '/jobseek/edit_pwd', // 修改密码 | ||||
| CompanyLoginByMobile: web + '/company/login_by_mobile', // 企业登录 | CompanyLoginByMobile: web + '/company/login_by_mobile', // 企业登录 | ||||
| JobseekerResetPwd: web + '/jobseek/resetpwd', // 修改密码 | |||||
| JobUrgentjobs: web + '/job/urgentjobs', // 急招职位 | JobUrgentjobs: web + '/job/urgentjobs', // 急招职位 | ||||
| JobHighpayjobs: web + '/job/highpayjobs', // 高薪职位 | JobHighpayjobs: web + '/job/highpayjobs', // 高薪职位 | ||||
| JobCampusjobs: web + '/job/campusjobs', // 校园招聘 | JobCampusjobs: web + '/job/campusjobs', // 校园招聘 | ||||
| JobAuthDetail: web + '/job/authdetail', // 获取职位详情--需登录 | |||||
| // 招聘会企业预定 | // 招聘会企业预定 | ||||
| RecruitmentbookAdd: web + '/recruitmentbook/add', // 添加 | RecruitmentbookAdd: web + '/recruitmentbook/add', // 添加 |
| <template> | <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> | </template> | ||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||
| import { ref, onMounted, defineProps, watch, computed } from 'vue'; | import { ref, onMounted, defineProps, watch, computed } from 'vue'; | ||||
| let imageBigOpen = ref<Boolean>(false) | |||||
| const props = defineProps({ | const props = defineProps({ | ||||
| imgObj: { | imgObj: { | ||||
| type: Object, | type: Object, | ||||
| default: {} | default: {} | ||||
| }, | |||||
| need: { | |||||
| type: Boolean, | |||||
| default: false | |||||
| } | } | ||||
| }); | }); | ||||
| let needPre = ref<Boolean>(props.need) | |||||
| let imageBigOpen = ref<Boolean>(false) | |||||
| interface imgType { | interface imgType { | ||||
| src ?: String, | src ?: String, | ||||
| width ?: Number, | width ?: Number, |
| <template> | <template> | ||||
| <a-affix :offset-top="90"> | |||||
| <a-menu v-model:selectedKeys="selectedKeys" @click="menuClick" style="width: 100%;border-radius: 8px;" mode="inline"> | <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-item v-for="(item, index) in menuList" :key="item.key">{{item.title}}</a-menu-item> | ||||
| </a-menu> | </a-menu> | ||||
| </a-affix> | |||||
| </template> | </template> | ||||
| <script setup lang="ts"> | <script setup lang="ts"> |
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="成立日期" name="establishment_date"> | <a-form-item label="成立日期" name="establishment_date"> | ||||
| <a-date-picker v-model:value="addOtherForm.chengli_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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-descriptions-item label="Email">{{basic.email}}</a-descriptions-item> | <a-descriptions-item label="Email">{{basic.email}}</a-descriptions-item> | ||||
| <a-descriptions-item label="传真">{{basic.fax}}</a-descriptions-item> | <a-descriptions-item label="传真">{{basic.fax}}</a-descriptions-item> | ||||
| </a-descriptions> | </a-descriptions> | ||||
| <a-descriptions :column="3" title="企业介绍"> | |||||
| <a-descriptions-item><div v-html="basic.introduction"></div></a-descriptions-item> | |||||
| </a-descriptions> | |||||
| </template> | </template> | ||||
| </div> | </div> | ||||
| </template> | </template> | ||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| import { dataForm, otherDataForm, reset } from '@/components/company/information/basic/data.ts'; | import { dataForm, otherDataForm, reset } from '@/components/company/information/basic/data.ts'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal, disabledDateFront } = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | const dayjsRef = ref(dayjs); | ||||
| let props = defineProps(['form_state']); | let props = defineProps(['form_state']); | ||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| basic.value = res.data; | basic.value = res.data; | ||||
| createForm.value = intersectionAlike(createForm.value, res.data) | createForm.value = intersectionAlike(createForm.value, res.data) | ||||
| addOtherForm.value = { | 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, | 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, | company_scale_cascader: res.data.scale, | ||||
| } | } | ||||
| }) | }) | ||||
| // 企业规模 | // 企业规模 | ||||
| const scaleSave = (data) => { | 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); | let showMap = ref<Boolean>(false); |
| <template v-else> | <template v-else> | ||||
| <!-- <a-search @searchData="searchData"></a-search> --> | <!-- <a-search @searchData="searchData"></a-search> --> | ||||
| <a-list :data-source="departmengList"> | <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> | ||||
| <template #renderItem="{ item }"> | <template #renderItem="{ item }"> | ||||
| <a-list-item> | <a-list-item> | ||||
| <template #actions> | <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-button> | ||||
| </a-popconfirm> | |||||
| <a-popconfirm title="是否删除该部门" @confirm="del(item.id)"> | |||||
| <a-button size="small" danger> | |||||
| 删除 | |||||
| </a-button> | |||||
| </a-popconfirm> | |||||
| </a-space> | |||||
| </template> | </template> | ||||
| <a-skeleton avatar :title="false" :loading="!!loading" active> | <a-skeleton avatar :title="false" :loading="!!loading" active> | ||||
| <a-list-item-meta> | <a-list-item-meta> |
| </a-form> | </a-form> | ||||
| </template> | </template> | ||||
| <template v-else> | <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> | </template> | ||||
| </div> | </div> | ||||
| </template> | </template> | ||||
| const getBasic = () => { | const getBasic = () => { | ||||
| PostCompanyDetailInfo().then(res => { | PostCompanyDetailInfo().then(res => { | ||||
| createForm.value.photo = res.data.photo | |||||
| createForm.value.photo = res.data.photo ? res.data.photo : '' | |||||
| addOtherForm.value = { | addOtherForm.value = { | ||||
| photo_img: imageprefix + res.data.photo, | |||||
| photo_img: res.data.photo ? imageprefix + res.data.photo : '', | |||||
| } | } | ||||
| }) | }) | ||||
| } | } |
| </a-form> | </a-form> | ||||
| </template> | </template> | ||||
| <template v-else> | <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> | </template> | ||||
| </div> | </div> | ||||
| </template> | </template> | ||||
| const getBasic = () => { | const getBasic = () => { | ||||
| PostCompanyDetailInfo().then(res => { | 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 = { | addOtherForm.value = { | ||||
| license_img: imageprefix + res.data.license_path, | |||||
| license_img: res.data.license_path ? imageprefix + res.data.license_path : '', | |||||
| } | } | ||||
| }) | }) | ||||
| } | } |
| <a-row :gutter="20"> | <a-row :gutter="20"> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="是否紧急" name="urgent"> | <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="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-radio-group> | ||||
| <a-form-item label="选择部门" name="department_id"> | <a-form-item label="选择部门" name="department_id"> | ||||
| <a-select v-model:value="addOtherForm.department_name" @change="departmentChange" | <a-select v-model:value="addOtherForm.department_name" @change="departmentChange" | ||||
| placeholder="请进行搜索选择部门" show-search :filter-option="false" label-in-value | 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" | <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> | :label="item.name" label-in-value>{{item.name}}</a-select-option> | ||||
| </a-select> | </a-select> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="招聘人数" name="invite_count"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item required label="职位类别"> | |||||
| <a-form-item label="职位类别"> | |||||
| <a-shujilian :dict="2004" placeholder="职位类别(最多三个,多选只取前三)" @saveTreeNode="jobTypeChange" | <a-shujilian :dict="2004" placeholder="职位类别(最多三个,多选只取前三)" @saveTreeNode="jobTypeChange" | ||||
| :tree_content="createForm.job_type"></a-shujilian> | :tree_content="createForm.job_type"></a-shujilian> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item required label="工作区域"> | |||||
| <a-form-item label="工作区域"> | |||||
| <a-shujilian :dict="2009" placeholder="工作区域(最多四个,多选只取前四)" | <a-shujilian :dict="2009" placeholder="工作区域(最多四个,多选只取前四)" | ||||
| @saveTreeNode="jobAddressChange" | @saveTreeNode="jobAddressChange" | ||||
| :tree_content="createForm.job_location"></a-shujilian> | :tree_content="createForm.job_location"></a-shujilian> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="24"> | <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" | <QuillEditor theme="snow" :options="richOption" toolbar="full" | ||||
| v-model:content="addOtherForm.describe_content" | v-model:content="addOtherForm.describe_content" | ||||
| @update:content="onEditorDescribeUpdate($event)" contentType="html" /> | @update:content="onEditorDescribeUpdate($event)" contentType="html" /> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <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" | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item required label="到期日期"> | |||||
| <a-form-item label="到期日期"> | |||||
| <a-date-picker v-model:value="addOtherForm.daoqi_date" @Change="disabledDateChange" | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="关键词"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="职位性质"> | <a-form-item label="职位性质"> | ||||
| <a-radio-group v-model:value="addOtherForm.job_nature" button-style="solid" | <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="2" style="width: 20%;">兼职</a-radio-button> | ||||
| <a-radio-button :value="3" 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> | <a-radio-button :value="4" style="width: 20%;">实习</a-radio-button> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item required label="食宿要求"> | |||||
| <a-form-item label="食宿要求"> | |||||
| <a-xuanze :dict="2016" placeholder="请选择食宿要求" @saveSelect="saveShisu" | <a-xuanze :dict="2016" placeholder="请选择食宿要求" @saveSelect="saveShisu" | ||||
| :select_content="addOtherForm.shisu_select"></a-xuanze> | :select_content="addOtherForm.shisu_select"></a-xuanze> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item required label="节假日休息情况"> | |||||
| <a-form-item label="节假日休息情况"> | |||||
| <a-xuanze :dict="2017" placeholder="请选择节假日休息情况" @saveSelect="saveHolidays" | <a-xuanze :dict="2017" placeholder="请选择节假日休息情况" @saveSelect="saveHolidays" | ||||
| :select_content="addOtherForm.holidays_select"></a-xuanze> | :select_content="addOtherForm.holidays_select"></a-xuanze> | ||||
| </a-form-item> | </a-form-item> | ||||
| <div v-show="current == 1"> | <div v-show="current == 1"> | ||||
| <a-row gutter="20"> | <a-row gutter="20"> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item required label="工作经验"> | |||||
| <a-form-item label="工作经验"> | |||||
| <a-xuanze :dict="2021" placeholder="请选择工作经验" @saveSelect="saveExperience" | <a-xuanze :dict="2021" placeholder="请选择工作经验" @saveSelect="saveExperience" | ||||
| :select_content="createForm.experience"></a-xuanze> | :select_content="createForm.experience"></a-xuanze> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <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="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-radio-group> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item required label="职称要求"> | |||||
| <a-form-item label="职称要求"> | |||||
| <a-xuanze :dict="2006" placeholder="请选择职称要求" @saveSelect="saveProfelevel" | <a-xuanze :dict="2006" placeholder="请选择职称要求" @saveSelect="saveProfelevel" | ||||
| :select_content="createForm.profelevel"></a-xuanze> | :select_content="createForm.profelevel"></a-xuanze> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item required label="技能认证"> | |||||
| <a-form-item label="技能认证"> | |||||
| <a-xuanze :dict="2015" placeholder="请选择技能认证" @saveSelect="saveCertification" | <a-xuanze :dict="2015" placeholder="请选择技能认证" @saveSelect="saveCertification" | ||||
| :select_content="createForm.certification"></a-xuanze> | :select_content="createForm.certification"></a-xuanze> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="掌握程度"> | <a-form-item label="掌握程度"> | ||||
| <a-xuanze :dict="2007" placeholder="请选择掌握程度" @saveSelect="saveLanguageDegree" | |||||
| <a-xuanze :dict="2008" placeholder="请选择掌握程度" @saveSelect="saveLanguageDegree" | |||||
| :select_content="createForm.language_degree"></a-xuanze> | :select_content="createForm.language_degree"></a-xuanze> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="性别要求" name="sex"> | <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="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="2" style="width: calc(100% / 3);">女</a-radio-button> | ||||
| <a-radio-button :value="3" style="width: calc(100% / 3);">不限</a-radio-button> | <a-radio-button :value="3" style="width: calc(100% / 3);">不限</a-radio-button> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="最小年龄" name="age_min"> | <a-form-item label="最小年龄" name="age_min"> | ||||
| <a-input-number :min="0" type="number" v-model:value="createForm.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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="最大年龄" name="age_max"> | <a-form-item label="最大年龄" name="age_max"> | ||||
| <a-input-number :min="0" type="number" v-model:value="createForm.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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <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="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="2" style="width: calc(100% / 3);">未婚</a-radio-button> | ||||
| <a-radio-button :value="3" style="width: calc(100% / 3);">不限</a-radio-button> | <a-radio-button :value="3" style="width: calc(100% / 3);">不限</a-radio-button> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-row> | <a-row> | ||||
| <template v-for="(item, index) in licenseOption"> | <template v-for="(item, index) in licenseOption"> | ||||
| <a-col span="8"> | <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> | </a-col> | ||||
| </template> | </template> | ||||
| </a-row> | </a-row> | ||||
| <div v-show="current == 2"> | <div v-show="current == 2"> | ||||
| <a-row gutter="20"> | <a-row gutter="20"> | ||||
| <a-col span="12"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="担任职位" name="possession"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="是否公开联系电话" name="phone_public"> | <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-button :value="2" style="width: 50%;">否</a-radio-button> | ||||
| </a-radio-group> | </a-radio-group> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="手机" name="mobile"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="是否公开手机" name="mobile_public"> | <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="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-radio-group> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="邮箱" name="email"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="是否公开邮箱" name="email_public"> | <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="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-radio-group> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="传真" name="fax"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="是否公开传真" name="fax_public"> | <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="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-radio-group> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="其他地址" name="other_address"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="面试地址" name="interview_address"> | <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-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="24"> | <a-col span="24"> | ||||
| .steps-action { | .steps-action { | ||||
| margin-top: 12px; | margin-top: 12px; | ||||
| } | } | ||||
| :deep(.ant-steps-item-icon) { | :deep(.ant-steps-item-icon) { | ||||
| background-color: #4FBE70 !important; | background-color: #4FBE70 !important; | ||||
| border-color: #4FBE70 !important; | |||||
| border-color: #4FBE70 !important; | |||||
| } | } | ||||
| </style> | </style> |
| <StarOutlined /> | <StarOutlined /> | ||||
| 收藏 | 收藏 | ||||
| </a-button> | </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 /> | <StarOutlined /> | ||||
| 取消收藏 | 取消收藏 | ||||
| </a-button> | </a-button> | ||||
| <a-button @click="applyJob(detail.id)"> | |||||
| <a-button @click="applyJob(detail.id)"> | |||||
| 投简历 | 投简历 | ||||
| </a-button> | </a-button> | ||||
| </a-sapce> | </a-sapce> | ||||
| <a-descriptions-item label="联系人">{{detail.contact.contact}}</a-descriptions-item> | <a-descriptions-item label="联系人">{{detail.contact.contact}}</a-descriptions-item> | ||||
| <a-descriptions-item | <a-descriptions-item | ||||
| label="职业类别">{{detail.base.types ? detail.base.types[0].name : '未知'}}</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> | <div v-html="detail.base.describe_text"></div> | ||||
| </a-descriptions-item> | </a-descriptions-item> | ||||
| </a-descriptions> | </a-descriptions> | ||||
| </div> | </div> | ||||
| <div style="margin-top: 30px;" > | |||||
| <div style="margin-top: 30px;"> | |||||
| <a-descriptions :column="1" title="地图"> | <a-descriptions :column="1" title="地图"> | ||||
| <a-descriptions-item :span="24"> | <a-descriptions-item :span="24"> | ||||
| <div ref="mapContainer" class="map-container"></div> | |||||
| <div ref="mapJob" class="map-container"></div> | |||||
| </a-descriptions-item> | </a-descriptions-item> | ||||
| </a-descriptions> | </a-descriptions> | ||||
| </div> | </div> | ||||
| <a-login></a-login> | <a-login></a-login> | ||||
| </template> | </template> | ||||
| <script setup lang="ts"> | <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 { useCommon } from '@/hooks/useCommon'; | ||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal, showOtherModal1 } = useCommon(); | let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal, showOtherModal1 } = useCommon(); | ||||
| let detail = ref<Object>(null) | let detail = ref<Object>(null) | ||||
| let token = ref(sessionStorage.getItem('token') ? sessionStorage.getItem('token') : '') | let token = ref(sessionStorage.getItem('token') ? sessionStorage.getItem('token') : '') | ||||
| let role = ref(sessionStorage.getItem('role') ? sessionStorage.getItem('role') : '') | let role = ref(sessionStorage.getItem('role') ? sessionStorage.getItem('role') : '') | ||||
| const mapContainer = ref(null); | |||||
| const mapJob = ref(null); | |||||
| const getDetail = () => { | 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 = () => { | 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 | center: center | ||||
| }); | }); | ||||
| //创建并初始化MultiMarker | //创建并初始化MultiMarker | ||||
| var markerLayer = new TMap.MultiMarker({ | |||||
| let markerLayer = new TMap.MultiMarker({ | |||||
| map: map, //指定地图容器 | map: map, //指定地图容器 | ||||
| //样式定义 | //样式定义 | ||||
| styles: { | styles: { | ||||
| geometries: [{ | geometries: [{ | ||||
| "id": "1", //点标记唯一标识,后续如果有删除、修改位置等操作,都需要此id | "id": "1", //点标记唯一标识,后续如果有删除、修改位置等操作,都需要此id | ||||
| "styleId": 'myStyle', //指定样式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": {//自定义属性 | "properties": {//自定义属性 | ||||
| "title": "marker1" | "title": "marker1" | ||||
| } | } | ||||
| ] | ] | ||||
| }); | }); | ||||
| } | } | ||||
| const toLogin = () => { | const toLogin = () => { | ||||
| showOtherModal1() | showOtherModal1() | ||||
| } | } | ||||
| const confirmCollect = (job_id : Number) => { | const confirmCollect = (job_id : Number) => { | ||||
| Modal.confirm({ | Modal.confirm({ | ||||
| title: `是否要收藏该职位`, | title: `是否要收藏该职位`, | ||||
| centered: true, | centered: true, | ||||
| icon: createVNode(ExclamationCircleOutlined), | icon: createVNode(ExclamationCircleOutlined), | ||||
| onOk() { | onOk() { | ||||
| PostJobseekAddfavorite({job_id: job_id }).then(res => { | |||||
| PostJobseekAddfavorite({ job_id: job_id }).then(res => { | |||||
| successToast('已收藏') | successToast('已收藏') | ||||
| mapContainer.value = null | |||||
| mapJob.value = null | |||||
| getDetail(); | getDetail(); | ||||
| }) | }) | ||||
| }, | }, | ||||
| onCancel() { | onCancel() { | ||||
| }, | }, | ||||
| }); | }); | ||||
| } | } | ||||
| const cancelCollect = (job_id : Number) => { | |||||
| const cancelCollect = (id : Number) => { | |||||
| Modal.confirm({ | Modal.confirm({ | ||||
| title: `是否要取消收藏该职位`, | title: `是否要取消收藏该职位`, | ||||
| centered: true, | centered: true, | ||||
| icon: createVNode(ExclamationCircleOutlined), | icon: createVNode(ExclamationCircleOutlined), | ||||
| onOk() { | onOk() { | ||||
| PostJobseekDelfavorite({job_id: job_id }).then(res => { | |||||
| PostJobseekDelfavorite({ id: id }).then(res => { | |||||
| successToast('已取消收藏') | successToast('已取消收藏') | ||||
| mapContainer.value = null | |||||
| mapJob.value = null | |||||
| getDetail(); | getDetail(); | ||||
| }) | }) | ||||
| }, | }, | ||||
| onCancel() { | onCancel() { | ||||
| }, | }, | ||||
| }); | }); | ||||
| } | } | ||||
| const applyJob = (job_id : Number) => { | const applyJob = (job_id : Number) => { | ||||
| Modal.confirm({ | Modal.confirm({ | ||||
| title: `是否要投递该职位`, | title: `是否要投递该职位`, | ||||
| centered: true, | centered: true, | ||||
| icon: createVNode(ExclamationCircleOutlined), | icon: createVNode(ExclamationCircleOutlined), | ||||
| onOk() { | onOk() { | ||||
| PostJobseekAddapplication({job_id: job_id }).then(res => { | |||||
| PostJobseekAddapplication({ job_id: job_id }).then(res => { | |||||
| successToast('已投递') | successToast('已投递') | ||||
| mapContainer.value = null | |||||
| mapJob.value = null | |||||
| getDetail(); | getDetail(); | ||||
| }) | }) | ||||
| }, | }, | ||||
| onCancel() { | onCancel() { | ||||
| }, | }, | ||||
| }); | }); | ||||
| } | } | ||||
| watch(() => props.id, (newVal) => { | watch(() => props.id, (newVal) => { | ||||
| job_id.value = newVal | job_id.value = newVal | ||||
| if (job_id.value) { | if (job_id.value) { | ||||
| mapContainer.value = null | |||||
| mapJob.value = null | |||||
| getDetail() | getDetail() | ||||
| } | } | ||||
| }, { immediate: true }) | }, { immediate: true }) | ||||
| :deep(.ant-btn) { | :deep(.ant-btn) { | ||||
| border-radius: 0 !important; | border-radius: 0 !important; | ||||
| } | } | ||||
| .map-container { | .map-container { | ||||
| width: 100%; | width: 100%; | ||||
| height: 400px; | height: 400px; |
| background-color: #4FBE70; | background-color: #4FBE70; | ||||
| transform: rotate(10deg); | transform: rotate(10deg); | ||||
| position: absolute; | position: absolute; | ||||
| top: 4px | |||||
| top: 4px; | |||||
| left: 4px; | |||||
| } | } | ||||
| .text-content { | .text-content { |
| </a-card-meta> | </a-card-meta> | ||||
| <a-divider /> | <a-divider /> | ||||
| <div v-html="detail.content"></div> | <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-card> | ||||
| </a-page-header> | </a-page-header> | ||||
| </template> | </template> | ||||
| <template v-else> | <template v-else> | ||||
| <a-list item-layout="horizontal" :data-source="recruitmentList" style="cursor: pointer;"> | <a-list item-layout="horizontal" :data-source="recruitmentList" style="cursor: pointer;"> | ||||
| <template #renderItem="{ item }"> | <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 :title="item.title" :description="'发布时间:'+item.created_at"> | ||||
| </a-list-item-meta> | </a-list-item-meta> | ||||
| </a-list-item> | </a-list-item> | ||||
| </template> | </template> | ||||
| </a-list> | </a-list> | ||||
| <a-flex align="center" justify="center"> | <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> | </a-flex> | ||||
| </template> | </template> | ||||
| </template> | </template> | ||||
| <script setup lang="ts"> | <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 { ArrowLeftOutlined } from '@ant-design/icons-vue'; | ||||
| import { router } from '@/router'; | |||||
| const emit = defineEmits(); | |||||
| let recruitmentList = ref<object[]>([]) | let recruitmentList = ref<object[]>([]) | ||||
| let detail = ref<Object>(null) | let detail = ref<Object>(null) | ||||
| let current = ref<Number>(1) | let current = ref<Number>(1) | ||||
| let total = ref<Number>(0) | let total = ref<Number>(0) | ||||
| let companyList = ref<Object>([]) | |||||
| const pageChange = (page) => { | const pageChange = (page) => { | ||||
| current.value = page | current.value = page | ||||
| getRecruitmentList() | getRecruitmentList() | ||||
| } | } | ||||
| const getRecruitmentList = (page) => { | const getRecruitmentList = (page) => { | ||||
| PostRecruitmentList({page: current.value}).then(res => { | |||||
| PostRecruitmentList({ page: current.value }).then(res => { | |||||
| recruitmentList.value = res.data.recruitments; | recruitmentList.value = res.data.recruitments; | ||||
| total.value = res.data.total; | total.value = res.data.total; | ||||
| }) | }) | ||||
| const toDetail = (data) => { | const toDetail = (data) => { | ||||
| detail.value = 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) => { | const back = (data) => { | ||||
| detail.value = null | detail.value = null | ||||
| } | } | ||||
| </script> | </script> | ||||
| <style> | |||||
| <style lang="less" scoped> | |||||
| .company-box { | |||||
| width: 100%; | |||||
| padding: 20px; | |||||
| cursor: pointer; | |||||
| border: 1px solid #f0f0f0; | |||||
| border-radius: 8px; | |||||
| } | |||||
| </style> | </style> |
| <a-col span="8" v-for="(item, index) in jobList"> | <a-col span="8" v-for="(item, index) in jobList"> | ||||
| <a-card :title="item.job_name"> | <a-card :title="item.job_name"> | ||||
| <template #extra> | <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> | </template> | ||||
| <a-row> | <a-row> | ||||
| <a-col span="20"> | <a-col span="20"> | ||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, computed, onMounted, defineEmits, createVNode } from 'vue'; | import { ref, computed, onMounted, defineEmits, createVNode } from 'vue'; | ||||
| import { GetJobseekListfavorite, PostJobseekUpdatefavorite } from '@/apis/models'; | |||||
| import { GetJobseekListfavorite, PostJobseekDelfavorite } from '@/apis/models'; | |||||
| import JobDetail from '@/components/jobseeker/invite/detail/index.vue' | import JobDetail from '@/components/jobseeker/invite/detail/index.vue' | ||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| centered: true, | centered: true, | ||||
| icon: createVNode(ExclamationCircleOutlined), | icon: createVNode(ExclamationCircleOutlined), | ||||
| onOk() { | onOk() { | ||||
| PostJobseekUpdatefavorite({ id: id, job_id: job_id }).then(res => { | |||||
| PostJobseekDelfavorite({ id: id, job_id: job_id }).then(res => { | |||||
| successToast('已取消收藏') | successToast('已取消收藏') | ||||
| getData(); | getData(); | ||||
| }) | }) |
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="出生日期" name="dob"> | <a-form-item label="出生日期" name="dob"> | ||||
| <a-date-picker v-model:value="addOtherForm.dob" @Change="dobChange" style="width: 100%;" | <a-date-picker v-model:value="addOtherForm.dob" @Change="dobChange" style="width: 100%;" | ||||
| size="large" /> | |||||
| size="large" :disabledDate="disabledDateFront" /> | |||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| import { dataForm, otherDataForm, reset } from '@/components/jobseeker/resume/basic/data.ts'; | import { dataForm, otherDataForm, reset } from '@/components/jobseeker/resume/basic/data.ts'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | 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); | const dayjsRef = ref(dayjs); | ||||
| let props = defineProps(['form_state']); | let props = defineProps(['form_state']); | ||||
| const emit = defineEmits(); | const emit = defineEmits(); |
| warnToast('请输入验证码') | warnToast('请输入验证码') | ||||
| return; | return; | ||||
| } else { | } 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') | |||||
| }) | |||||
| } | } | ||||
| } | } |
| :deep(.ant-menu-submenu-open) { | :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; | border-bottom-color: #4FBE70 !important; | ||||
| } | } | ||||
| const disabledDate = (val : Dayjs) => { | const disabledDate = (val : Dayjs) => { | ||||
| return val && val < dayjs().endOf('day'); | return val && val < dayjs().endOf('day'); | ||||
| }; | }; | ||||
| const disabledDateFront = (val : Dayjs) => { | |||||
| return val && val > dayjs().endOf('day'); | |||||
| }; | |||||
| // 照片前缀 | // 照片前缀 | ||||
| // const imageprefix : string = 'https://admin1.jcjob.cn/img/' | // const imageprefix : string = 'https://admin1.jcjob.cn/img/' | ||||
| richOption, | richOption, | ||||
| message, | message, | ||||
| disabledDate, | disabledDate, | ||||
| disabledDateFront, | |||||
| imageprefix, | imageprefix, | ||||
| openSearchModel, | openSearchModel, | ||||
| showSearch, | showSearch, |
| .ant-btn-primary { | .ant-btn-primary { | ||||
| background-color: #4FBE70 !important; | 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 { | .ant-menu-submenu-selected::after { | ||||
| border-bottom-color: #4FBE70 !important; | border-bottom-color: #4FBE70 !important; | ||||
| } | } |
| </a-row> | </a-row> | ||||
| </template> | </template> | ||||
| <script setup lang="ts"> | <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' | 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 menu_list = ref([{ title: '个人求职', key: 10 },{ title: '企业招聘', key: 11},{ title: '应届毕业生', key: 12},{ title: '人才入户', key: 13},{ title: '其他下载', key: 14}]) | ||||
| let curKey = ref<Number>(10) | let curKey = ref<Number>(10) | ||||
| const changeKey = (data) => { | const changeKey = (data) => { | ||||
| curKey.value = data.key; | 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> | </script> | ||||
| <style> | <style> |
| </a-row> | </a-row> | ||||
| </template> | </template> | ||||
| <script setup lang="ts"> | <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' | 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 menu_list = ref([{ title: '本站公告', key: 3 },{ title: '小榄动态', key: 4},{ title: '职场攻略', key: 5},{ title: '创业就业', key: 6},{ title: '劳动与法', key: 8}]) | ||||
| let curKey = ref<Number>(3) | let curKey = ref<Number>(3) | ||||
| const changeKey = (data) => { | const changeKey = (data) => { | ||||
| curKey.value = data.key; | 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> | </script> | ||||
| <style> | <style> |
| </a-list-item> | </a-list-item> | ||||
| </a-list> | </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="企业信息"> | <a-tab-pane :key="1" tab="企业信息"> | ||||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | ||||
| <a-descriptions title="公司介绍" layout="vertical"> | <a-descriptions title="公司介绍" layout="vertical"> | ||||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | ||||
| <a-descriptions :column="7" title="企业相册" layout="vertical"> | <a-descriptions :column="7" title="企业相册" layout="vertical"> | ||||
| <a-descriptions-item><image-container | <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> | </a-descriptions> | ||||
| </div> | </div> | ||||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | ||||
| <job-card :list="jobList" @detail="toDetail"></job-card> | <job-card :list="jobList" @detail="toDetail"></job-card> | ||||
| <a-flex justify="center"> | <a-flex justify="center"> | ||||
| <a-space> | <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-space> | ||||
| </a-flex> | </a-flex> | ||||
| <!-- <a-card hoverable :bordered="false" style="width: 100%"> | <!-- <a-card hoverable :bordered="false" style="width: 100%"> | ||||
| </template> | </template> | ||||
| </a-card> --> | </a-card> --> | ||||
| </div> | </div> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="18"> | <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> | <job-detail :id="job_id"></job-detail> | ||||
| </div> | </div> | ||||
| </a-col> | </a-col> | ||||
| const toDetail = (data) => { | const toDetail = (data) => { | ||||
| job_id.value = data.id; | job_id.value = data.id; | ||||
| } | } | ||||
| const pageChange = (page) => { | const pageChange = (page) => { | ||||
| current.value = page | current.value = page | ||||
| getJobCompanyjobs(page) | getJobCompanyjobs(page) | ||||
| var map = new TMap.Map(mapContainer.value, { | var map = new TMap.Map(mapContainer.value, { | ||||
| center: center | center: center | ||||
| }); | }); | ||||
| //创建并初始化MultiMarker | //创建并初始化MultiMarker | ||||
| var markerLayer = new TMap.MultiMarker({ | var markerLayer = new TMap.MultiMarker({ | ||||
| map: map, //指定地图容器 | map: map, //指定地图容器 | ||||
| } | } | ||||
| ] | ] | ||||
| }); | }); | ||||
| } | } | ||||
| if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) { | if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) { | ||||
| PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => { | PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => { | ||||
| companyDetail.value = res.data; | 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) | getJobCompanyjobs(current.value) | ||||
| } | } | ||||
| } else { | |||||
| initMap() | |||||
| } | } | ||||
| }) | }) | ||||
| .map-container { | .map-container { | ||||
| width: 100%; | width: 100%; | ||||
| height: 400px; | |||||
| height: 600px; | |||||
| } | } | ||||
| :deep(.ant-card) { | :deep(.ant-card) { | ||||
| padding: 0 !important; | padding: 0 !important; | ||||
| } | } | ||||
| :deep(.ant-card-body) { | :deep(.ant-card-body) { | ||||
| padding: 0 !important; | padding: 0 !important; | ||||
| } | } |
| <a-row :gutter="20"> | <a-row :gutter="20"> | ||||
| <a-col span="4"> | <a-col span="4"> | ||||
| <div style="position: fixed; top: 90px; z-index:99;"> | <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> | @click="anchorClick"></a-anchor> | ||||
| </div> | </div> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="20"> | <a-col span="20"> | ||||
| <div style="width: 100%;background-color: #fff;padding: 0 20px;border-radius: 8px;"> | <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" | <a-space direction="vertical" justify="space-between" :size="36" | ||||
| style="width: 100% !important;"> | style="width: 100% !important;"> | ||||
| <div id="basic"> | <div id="basic"> |
| </template> | </template> | ||||
| <a-list-item-meta> | <a-list-item-meta> | ||||
| <template #title> | <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> | ||||
| <template #description> | <template #description> | ||||
| <div> | <div> | ||||
| </template> | </template> | ||||
| <template #avatar> | <template #avatar> | ||||
| <image-container | <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> | </template> | ||||
| </a-list-item-meta> | </a-list-item-meta> | ||||
| </a-list-item> | </a-list-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="24" v-if="jobList.length > 0"> | <a-col span="24" v-if="jobList.length > 0"> | ||||
| <a-flex justify="center"> | <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-flex> | ||||
| </a-col> | </a-col> | ||||
| </a-row> | </a-row> | ||||
| import { PostCompanyProfile, GetCompanyRecommentResume, PostCompanyTalentPoolAdd, PostCompanyResumeInterviewAdd ,PostCompanyJobList} from '@/apis/models'; | import { PostCompanyProfile, GetCompanyRecommentResume, PostCompanyTalentPoolAdd, PostCompanyResumeInterviewAdd ,PostCompanyJobList} from '@/apis/models'; | ||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| let { commomParams, ExclamationCircleOutlined, Modal, dayjs, disabledDate, showOtherModal1 } = useCommon(); | |||||
| let { commomParams, ExclamationCircleOutlined, Modal, dayjs, disabledDate, showOtherModal1 , imageprefix} = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | const dayjsRef = ref(dayjs); | ||||
| let jobList = ref<Object[]>([]) | let jobList = ref<Object[]>([]) | ||||
| let basic = ref<Object>({}) | let basic = ref<Object>({}) | ||||
| }) | }) | ||||
| } | } | ||||
| const positionChange = (val : Object) => { | const positionChange = (val : Object) => { | ||||
| debugger | |||||
| position_name.value = val.option.label; | position_name.value = val.option.label; | ||||
| form.job_id = Number(val.key); | form.job_id = Number(val.key); | ||||
| } | } |
| </div> | </div> | ||||
| </template> | </template> | ||||
| <template #avatar> | <template #avatar> | ||||
| <a-avatar :src="'https://rcsc-test.jcjob.cn/img'+basic.photo" :size="96" /> | |||||
| <a-avatar :src="imageprefix+basic.photo" :size="96" /> | |||||
| </template> | </template> | ||||
| </a-list-item-meta> | </a-list-item-meta> | ||||
| <div style="margin-left: 108px;"> | <div style="margin-left: 108px;"> | ||||
| </a-descriptions-item> | </a-descriptions-item> | ||||
| <a-descriptions-item :span="3" label="关注公众号,接收面试消息"> | <a-descriptions-item :span="3" label="关注公众号,接收面试消息"> | ||||
| <image-container | <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-item> | ||||
| </a-descriptions> | </a-descriptions> | ||||
| </div> | </div> | ||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| import { EditOutlined, FileSearchOutlined, RedoOutlined } from '@ant-design/icons-vue'; | import { EditOutlined, FileSearchOutlined, RedoOutlined } from '@ant-design/icons-vue'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| let { commomParams, ExclamationCircleOutlined, Modal, onMenu, showOtherModal1 } = useCommon(); | |||||
| let { commomParams, ExclamationCircleOutlined, Modal, onMenu, showOtherModal1, imageprefix } = useCommon(); | |||||
| let jobList = ref<Object[]>([]) | let jobList = ref<Object[]>([]) | ||||
| let basic = ref<Object>({}) | let basic = ref<Object>({}) | ||||
| let seeLength = ref<Number>(0) | let seeLength = ref<Number>(0) |
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | 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'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| let smsForm = ref<Object>({ | let smsForm = ref<Object>({ | ||||
| mobile: "", | mobile: "", | ||||
| capt_id: "" | capt_id: "" | ||||
| }) | }) | ||||
| let createForm = ref({ | let createForm = ref({ | ||||
| mobile: '', | |||||
| sms_code: '', | sms_code: '', | ||||
| new_password: '', | |||||
| new_pwd: '', | |||||
| }) | }) | ||||
| let capt_id = ref<String>('') | let capt_id = ref<String>('') | ||||
| const saveForm = () => { | const saveForm = () => { | ||||
| PostJobseekerEditPwd(createForm.value).then(res => { | |||||
| successToast('修改成功') | |||||
| PostJobseekerResetPwd(createForm.value).then(res => { | |||||
| successToast('重置成功') | |||||
| resetForm() | resetForm() | ||||
| }) | }) | ||||
| } | } | ||||
| const resetForm = () => { | const resetForm = () => { | ||||
| smsForm.value = { | |||||
| mobile: "", | |||||
| captcha: "", | |||||
| capt_id: "" | |||||
| } | |||||
| createForm.value = { | createForm.value = { | ||||
| sms_code: '', | sms_code: '', | ||||
| new_password: '', | new_password: '', |
| </a-col> | </a-col> | ||||
| <template v-if="loginMethod == 'password'"> | <template v-if="loginMethod == 'password'"> | ||||
| <a-col span="24"> | <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> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-input v-model:value="createForm.captcha" placeholder="验证码" size="large" /> | <a-input v-model:value="createForm.captcha" placeholder="验证码" size="large" /> | ||||
| </a-col> | </a-col> | ||||
| <template v-if="registerSegmentedValue == '求职者注册'"> | <template v-if="registerSegmentedValue == '求职者注册'"> | ||||
| <a-col span="24"> | <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> | ||||
| <a-col span="24"> | <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> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-input v-model:value="personalForm.captcha" placeholder="验证码" size="large" /> | <a-input v-model:value="personalForm.captcha" placeholder="验证码" size="large" /> | ||||
| </template> | </template> | ||||
| <template v-if="registerSegmentedValue == '企业注册'"> | <template v-if="registerSegmentedValue == '企业注册'"> | ||||
| <a-col span="24"> | <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> | ||||
| <a-col span="24"> | <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> | ||||
| <a-col span="24"> | <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" /> | size="large" /> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="24"> | <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> | ||||
| <a-col span="24"> | <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> | ||||
| <a-col span="24"> | <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> | ||||
| <a-col span="24"> | <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> | ||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-input v-model:value="companyForm.captcha" placeholder="验证码" size="large" /> | <a-input v-model:value="companyForm.captcha" placeholder="验证码" size="large" /> | ||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||
| import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | 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 { store } from '@/store/index'; | ||||
| import { router } from '@/router/index'; | import { router } from '@/router/index'; | ||||
| import { dataForm, otherDataForm, personalDataForm, companyDataForm, smsDataForm, smsLoginDataForm, reset } from '@/views/login/data.ts'; | import { dataForm, otherDataForm, personalDataForm, companyDataForm, smsDataForm, smsLoginDataForm, reset } from '@/views/login/data.ts'; | ||||
| smsForm.value.mobile = createForm.value.username ? createForm.value.username : ''; | smsForm.value.mobile = createForm.value.username ? createForm.value.username : ''; | ||||
| smsForm.value.capt_id = capt_id.value; | smsForm.value.capt_id = capt_id.value; | ||||
| if (!smsForm.value.mobile) { | if (!smsForm.value.mobile) { | ||||
| warnToast('请输入手机号') | |||||
| warnToast('手机号') | |||||
| return false; | return false; | ||||
| } | } | ||||
| if (!smsForm.value.captcha) { | if (!smsForm.value.captcha) { | ||||
| warnToast('请输入图形验证码') | |||||
| warnToast('图形验证码') | |||||
| return false; | return false; | ||||
| } | } | ||||
| PostSmsSend(smsForm.value).then(res => { | PostSmsSend(smsForm.value).then(res => { | ||||
| } | } | ||||
| // 进入注册 | // 进入注册 | ||||
| // 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(() => { | onMounted(() => { |