| 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}; | |||||
| 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-CsbGYAgV.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-Ua34iPmJ.js"></script> | |||||
| <link rel="stylesheet" crossorigin href="/assets/index-kUK-5M1q.css"> | |||||
| <script type="module" crossorigin src="/assets/index-CsbGYAgV.js"></script> | |||||
| <link rel="stylesheet" crossorigin href="/assets/index--JoympCp.css"> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| <div id="app"></div> | <div id="app"></div> |
| <template #operation="{ record }"> | <template #operation="{ record }"> | ||||
| <slot :record='record'></slot> | <slot :record='record'></slot> | ||||
| </template> | </template> | ||||
| <template #meet_status="{ record }"> | |||||
| <slot name="meet_status" :record='record'></slot> | |||||
| </template> | |||||
| </a-table> | </a-table> | ||||
| </template> | </template> | ||||
| fax_public: 2, | fax_public: 2, | ||||
| other_address: '', | other_address: '', | ||||
| interview_address: '', | interview_address: '', | ||||
| longitude: 0, | |||||
| latitude: 0, | |||||
| } | } | ||||
| export let otherDataForm = { | export let otherDataForm = { | ||||
| fax_public: 2, | fax_public: 2, | ||||
| other_address: '', | other_address: '', | ||||
| interview_address: '', | interview_address: '', | ||||
| longitude: 0, | |||||
| latitude: 0, | |||||
| } | } | ||||
| otherDataForm = { | otherDataForm = { | ||||
| department_name: null, | department_name: null, |
| size="large" /> | size="large" /> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | |||||
| <a-form-item label="地图上选择经度"> | |||||
| <a-input v-model:value="createForm.longitude" placeholder="选择经度" disabled/> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item label="地图上选择纬度"> | |||||
| <a-input v-model:value="createForm.latitude" placeholder="选择纬度" disabled/> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-form-item label="选择经纬度"> | |||||
| <a-flex justify="center"> | |||||
| <div style="width: 90%;"> | |||||
| <a-switch v-model:checked="showMap"> </a-switch> | |||||
| <div v-if="showMap"> | |||||
| <v-map @getLoc="getLoc"></v-map> | |||||
| </div> | |||||
| </div> | |||||
| </a-flex> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | <a-col span="24"> | ||||
| <a-flex justify="flex-end"> | <a-flex justify="flex-end"> | ||||
| <a-space> | <a-space> | ||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | ||||
| import { PostCompanyJobAdd, PostCompanyJobEdit, GetDictTree, GetCompanyDepartmentList, GetCompanyJobInfo } from '@/apis/models'; | import { PostCompanyJobAdd, PostCompanyJobEdit, GetDictTree, GetCompanyDepartmentList, GetCompanyJobInfo } from '@/apis/models'; | ||||
| import vMap from '@/components/map/map-iframe.vue' | |||||
| import { intersectionAlike } from '@/utils/dataHelper'; | import { intersectionAlike } from '@/utils/dataHelper'; | ||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| import { steps, dataForm, otherDataForm, reset } from '@/components/company/invite/position/data.ts'; | import { steps, dataForm, otherDataForm, reset } from '@/components/company/invite/position/data.ts'; | ||||
| createForm.value.location_city = data.arr1[1] ? data.arr1[1] : 0; | createForm.value.location_city = data.arr1[1] ? data.arr1[1] : 0; | ||||
| createForm.value.location_town = data.arr1[2] ? data.arr1[2] : 0; | createForm.value.location_town = data.arr1[2] ? data.arr1[2] : 0; | ||||
| } | } | ||||
| let showMap = ref<Boolean>(false); | |||||
| // 经纬度 | |||||
| const getLoc = (mapData : Object) => { | |||||
| createForm.value.latitude = mapData.latlng.lng; | |||||
| createForm.value.longitude = mapData.latlng.lat; | |||||
| showMap.value = false; | |||||
| } | |||||
| const sumbitForm = () => { | const sumbitForm = () => { | ||||
| if (!job_id.value) { | if (!job_id.value) { |
| dataIndex: 'open_date' | dataIndex: 'open_date' | ||||
| }, { | }, { | ||||
| title: '开通状态', | title: '开通状态', | ||||
| dataIndex: 'status' | |||||
| dataIndex: 'status', | |||||
| slots: { customRender: 'meet_status' }, | |||||
| }, | }, | ||||
| { | { | ||||
| title: '操作', | title: '操作', |
| <a-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></a-search> | <a-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></a-search> | ||||
| <a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | <a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | ||||
| @page="getPage" :loading="loading"> | @page="getPage" :loading="loading"> | ||||
| <template #meet_status="{ record }"> | |||||
| <span v-if="record.status == 1">开启</span> | |||||
| <span v-if="record.status == 2">关闭</span> | |||||
| </template> | |||||
| <template #default="{ record }"> | <template #default="{ record }"> | ||||
| <a-row :gutter="20"> | <a-row :gutter="20"> | ||||
| <a-popconfirm title="是否要申请参加该招聘会?" @confirm="applyFor(record.id)"> | <a-popconfirm title="是否要申请参加该招聘会?" @confirm="applyFor(record.id)"> |
| <template> | <template> | ||||
| <template v-if="!seekerList || seekerList.length == 0"> | |||||
| <a-empty style="height: 100vh;"> | |||||
| <template #description> | |||||
| 无求职者信息 | |||||
| </template> | |||||
| </a-empty> | |||||
| </template> | |||||
| <template v-else> | |||||
| <a-row :gutter="[20,20]"> | |||||
| <a-col span="24" v-for="(item, index) in seekerList"> | |||||
| <a-card> | |||||
| <div class="talent-box"> | |||||
| <a-list> | |||||
| <a-list-item> | |||||
| <template #actions> | |||||
| <a-button @click="detail(item)"> | |||||
| <StarOutlined /> | |||||
| 预览 | |||||
| </a-button> | |||||
| <a-button @click="putInTatent(item.customer_id)"> | |||||
| 放入人才库 | |||||
| </a-button> | |||||
| <a-button @click="interview(item)"> | |||||
| 邀请面试 | |||||
| </a-button> | |||||
| </template> | |||||
| <a-list-item-meta> | |||||
| <template #title> | |||||
| {{item.seekername}} | |||||
| <a-spin :spinning="spinning"> | |||||
| <template v-if="!seekerList || seekerList.length == 0"> | |||||
| <a-empty style="height: 100vh;"> | |||||
| <template #description> | |||||
| 无求职者信息 | |||||
| </template> | |||||
| </a-empty> | |||||
| </template> | |||||
| <template v-else> | |||||
| <a-row :gutter="[20,20]"> | |||||
| <a-col span="24" v-for="(item, index) in seekerList"> | |||||
| <a-card> | |||||
| <div class="talent-box"> | |||||
| <a-list> | |||||
| <a-list-item> | |||||
| <template #actions> | |||||
| <a-button @click="detail(item)"> | |||||
| <StarOutlined /> | |||||
| 预览 | |||||
| </a-button> | |||||
| <a-button @click="putInTatent(item.customer_id)"> | |||||
| 放入人才库 | |||||
| </a-button> | |||||
| <a-button @click="interview(item)"> | |||||
| 邀请面试 | |||||
| </a-button> | |||||
| </template> | </template> | ||||
| <template #description> | |||||
| <div> | |||||
| {{item.gender}} | |||||
| <a-divider type="vertical" /> | |||||
| {{item.education_text}} | |||||
| <a-divider type="vertical" /> | |||||
| {{item.now_level1_text}}{{item.now_level2_text}} | |||||
| </div> | |||||
| <div style="margin-top: 10px; overflow: hidden; | |||||
| display: -webkit-box; | |||||
| -webkit-line-clamp: 1; | |||||
| -webkit-box-orient: vertical; | |||||
| text-overflow: ellipsis;"> | |||||
| <div v-html="item.introduction"></div> | |||||
| </div> | |||||
| </template> | |||||
| <template #avatar> | |||||
| <image-container | |||||
| :imgObj="{src: '/images/onlylogo.jpg',width: '48px',height:'48px'}"></image-container> | |||||
| </template> | |||||
| </a-list-item-meta> | |||||
| </a-list-item> | |||||
| </a-list> | |||||
| </div> | |||||
| </a-card> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="center"> | |||||
| <a-space> | |||||
| <a-pagination hideOnSinglePage :total="commomParams.page.total" @change="getPage" /> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <a-modal v-model:open="openInterview" centered title="面试邀请" @ok="interviewOk"> | |||||
| <a-space direction="vertical" style="width: 100%;"> | |||||
| <a-select v-model:value="position_name" @change="positionChange" placeholder="请进行搜索选择职位" show-search | |||||
| :filter-option="false" label-in-value @search="positionSearch" size="large" style="width: 100%;"> | |||||
| <a-select-option v-for="item in position_list" :key="item.id" :value="item.id" :label="item.name" | |||||
| label-in-value>{{item.name}}</a-select-option> | |||||
| </a-select> | |||||
| <a-date-picker v-model:value="time" @Change="timeChange" show-time style="width: 100%;" | |||||
| placeholder="请选择面试日期" size="large" :disabled-date="disabledDate" /> | |||||
| </a-space> | |||||
| </a-modal> | |||||
| <resume-detail v-if="detail_record" :detail_record="detail_record"></resume-detail> | |||||
| </template> | |||||
| <a-list-item-meta> | |||||
| <template #title> | |||||
| {{item.seekername}} | |||||
| </template> | |||||
| <template #description> | |||||
| <div> | |||||
| {{item.gender}} | |||||
| <a-divider type="vertical" /> | |||||
| {{item.education_text}} | |||||
| <a-divider type="vertical" /> | |||||
| {{item.now_level1_text}}{{item.now_level2_text}} | |||||
| </div> | |||||
| <div style="margin-top: 10px; overflow: hidden; | |||||
| display: -webkit-box; | |||||
| -webkit-line-clamp: 1; | |||||
| -webkit-box-orient: vertical; | |||||
| text-overflow: ellipsis;"> | |||||
| <div v-html="item.introduction"></div> | |||||
| </div> | |||||
| </template> | |||||
| <template #avatar> | |||||
| <image-container | |||||
| :imgObj="{src: '/images/onlylogo.jpg',width: '48px',height:'48px'}"></image-container> | |||||
| </template> | |||||
| </a-list-item-meta> | |||||
| </a-list-item> | |||||
| </a-list> | |||||
| </div> | |||||
| </a-card> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="center"> | |||||
| <a-space> | |||||
| <a-pagination hideOnSinglePage :total="commomParams.page.total" @change="getPage" /> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <a-modal v-model:open="openInterview" centered title="面试邀请" @ok="interviewOk"> | |||||
| <a-space direction="vertical" style="width: 100%;"> | |||||
| <a-select v-model:value="position_name" @change="positionChange" placeholder="请进行搜索选择职位" show-search | |||||
| :filter-option="false" label-in-value @search="positionSearch" size="large" | |||||
| style="width: 100%;"> | |||||
| <a-select-option v-for="item in position_list" :key="item.id" :value="item.id" | |||||
| :label="item.name" label-in-value>{{item.name}}</a-select-option> | |||||
| </a-select> | |||||
| <a-date-picker v-model:value="time" @Change="timeChange" show-time style="width: 100%;" | |||||
| placeholder="请选择面试日期" size="large" :disabled-date="disabledDate" /> | |||||
| </a-space> | |||||
| </a-modal> | |||||
| <resume-detail v-if="detail_record" :detail_record="detail_record"></resume-detail> | |||||
| </template> | |||||
| </a-spin> | |||||
| </template> | </template> | ||||
| const dayjsRef = ref(dayjs); | const dayjsRef = ref(dayjs); | ||||
| let props = defineProps(['search']); | let props = defineProps(['search']); | ||||
| let seekerList = ref<object[]>([]) | let seekerList = ref<object[]>([]) | ||||
| let loading = ref<Boolean>(true); | |||||
| let spinning = ref<Boolean>(true); | |||||
| const getPage = (data : object) => { | const getPage = (data : object) => { | ||||
| } | } | ||||
| const getData = async () => { | const getData = async () => { | ||||
| try { | try { | ||||
| loading.value = true; | |||||
| spinning.value = true; | |||||
| let res = await PostJobseekerList(commomParams.value.search); | let res = await PostJobseekerList(commomParams.value.search); | ||||
| loading.value = false; | |||||
| spinning.value = false; | |||||
| seekerList.value = res.data.seekers; | seekerList.value = res.data.seekers; | ||||
| commomParams.value.page = { | commomParams.value.page = { | ||||
| current: commomParams.value.search.page, | current: commomParams.value.search.page, | ||||
| showSizeChanger: true | showSizeChanger: true | ||||
| }; | }; | ||||
| } catch { | } catch { | ||||
| loading.value = false; | |||||
| spinning.value = false; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| onMounted(() => { | onMounted(() => { | ||||
| getData(); | |||||
| // getData(); | |||||
| }) | }) | ||||
| watch(() => [props.search], (newVal) => { | watch(() => [props.search], (newVal) => { | ||||
| if (newVal[0]) { | if (newVal[0]) { | ||||
| commomParams.value.search = newVal[0]; | commomParams.value.search = newVal[0]; | ||||
| getData(); | |||||
| } | } | ||||
| getData(); | |||||
| }, { immediate: true }) | }, { immediate: true }) | ||||
| </script> | </script> | ||||
| watch(() => props.search_params, (newVal) => { | watch(() => props.search_params, (newVal) => { | ||||
| emit('searchData', commomParams.value.search) | emit('searchData', commomParams.value.search) | ||||
| },{ | |||||
| immediate: true | |||||
| }) | }) | ||||
| const getData = () => { | const getData = () => { |
| watch(() => props.search_params, (newVal) => { | watch(() => props.search_params, (newVal) => { | ||||
| emit('searchData', commomParams.value.search) | emit('searchData', commomParams.value.search) | ||||
| },{ | |||||
| immediate: true | |||||
| }) | }) | ||||
| const getData = () => { | const getData = () => { |
| <template #overlay> | <template #overlay> | ||||
| <a-menu> | <a-menu> | ||||
| <a-menu-item key="1"> | <a-menu-item key="1"> | ||||
| <a-button @click="contact(record)" block>查看联系方式</a-button> | |||||
| <a-button @click="contact(record.customer_id)" block>查看联系方式</a-button> | |||||
| </a-menu-item> | </a-menu-item> | ||||
| <a-menu-item key="1"> | <a-menu-item key="1"> | ||||
| <a-button @click="detail(record)" block>预览简历</a-button> | <a-button @click="detail(record)" block>预览简历</a-button> | ||||
| } | } | ||||
| } | } | ||||
| const contact = () => { | |||||
| const contact = (id) => { | |||||
| Modal.confirm({ | Modal.confirm({ | ||||
| title: `是否要放入人才库`, | |||||
| title: `本次将会扣除一个点数,是否继续`, | |||||
| centered: true, | centered: true, | ||||
| icon: createVNode(ExclamationCircleOutlined), | icon: createVNode(ExclamationCircleOutlined), | ||||
| onOk() { | onOk() { | ||||
| PostCompanyTalentPoolAdd({ customer_id: id }).then(res => { | |||||
| successToast('已放入人才库') | |||||
| GetJobapplicantContactdetail({ customer_id: id }).then(res => { | |||||
| successToast('请求成功,请进入已查看联系方式表查看') | |||||
| getData(); | getData(); | ||||
| }) | }) | ||||
| }, | }, |
| watch(() => props.search_params, (newVal) => { | watch(() => props.search_params, (newVal) => { | ||||
| emit('searchData', commomParams.value.search) | emit('searchData', commomParams.value.search) | ||||
| },{ | |||||
| immediate: true | |||||
| }) | }) | ||||
| const getData = () => { | const getData = () => { |
| watch(() => props.search_params, (newVal) => { | watch(() => props.search_params, (newVal) => { | ||||
| emit('searchData', commomParams.value.search) | emit('searchData', commomParams.value.search) | ||||
| },{ | |||||
| immediate: true | |||||
| }) | }) | ||||
| const getData = () => { | const getData = () => { |
| watch(() => props.search_params, (newVal) => { | watch(() => props.search_params, (newVal) => { | ||||
| emit('searchData', commomParams.value.search) | emit('searchData', commomParams.value.search) | ||||
| },{ | |||||
| immediate: true | |||||
| }) | }) | ||||
| const getData = () => { | const getData = () => { |
| </template> | </template> | ||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, computed, onMounted, defineProps, watch } from 'vue'; | |||||
| import { ref, computed, onMounted, defineProps, watch, onBeforeUnmount } from 'vue'; | |||||
| import { GetArticleList } from '@/apis/models'; | import { GetArticleList } from '@/apis/models'; | ||||
| import { ArrowLeftOutlined } from '@ant-design/icons-vue'; | import { ArrowLeftOutlined } from '@ant-design/icons-vue'; | ||||
| let props = defineProps(['key_id']); | let props = defineProps(['key_id']); | ||||
| let current = ref<Number>(1) | let current = ref<Number>(1) | ||||
| let total = ref<Number>(0) | let total = ref<Number>(0) | ||||
| onMounted(() => { | |||||
| if(sessionStorage.getItem('article_data')) { | |||||
| detail.value = JSON.parse(sessionStorage.getItem('article_data')) | |||||
| GetArticleList({page: current.value, hot: 2}).then(res => { | |||||
| articleList.value = res.data.articles; | |||||
| total.value = res.data.total; | |||||
| }) | |||||
| } | |||||
| }) | |||||
| onBeforeUnmount(() => { | |||||
| sessionStorage.removeItem('article_data') | |||||
| }) | |||||
| const pageChange = (page) => { | const pageChange = (page) => { | ||||
| current.value = page | current.value = page | ||||
| getArticleList(key.value) | getArticleList(key.value) | ||||
| } | } | ||||
| const getArticleList = (val) => { | const getArticleList = (val) => { | ||||
| GetArticleList({section_id: val, page: current.value}).then(res => { | |||||
| articleList.value = res.data.articles; | |||||
| total.value = res.data.total; | |||||
| }) | |||||
| if(val == 1) { | |||||
| GetArticleList({page: current.value, hot: 2}).then(res => { | |||||
| articleList.value = res.data.articles; | |||||
| total.value = res.data.total; | |||||
| }) | |||||
| } else { | |||||
| GetArticleList({section_id: val, page: current.value}).then(res => { | |||||
| articleList.value = res.data.articles; | |||||
| total.value = res.data.total; | |||||
| }) | |||||
| } | |||||
| } | } | ||||
| const toDetail = (data) => { | const toDetail = (data) => { | ||||
| watch(() => props.key_id, (newVal) => { | watch(() => props.key_id, (newVal) => { | ||||
| key.value = newVal | |||||
| getArticleList(newVal) | |||||
| if(sessionStorage.getItem('article_data')) { | |||||
| key.value = 1 | |||||
| } else { | |||||
| key.value = newVal | |||||
| } | |||||
| getArticleList(key.value) | |||||
| }, { immediate: true }) | }, { immediate: true }) | ||||
| </script> | </script> |
| if (sessionStorage.getItem('token')) { | if (sessionStorage.getItem('token')) { | ||||
| GetJobAuthDetail({ id: job_id.value }).then(res => { | GetJobAuthDetail({ id: job_id.value }).then(res => { | ||||
| detail.value = res.data; | detail.value = res.data; | ||||
| if (mapJob.value && detail.value.latitude && detail.value.longitude) { | |||||
| if (mapJob.value && detail.value.contact.latitude && detail.value.contact.longitude) { | |||||
| initMap() | initMap() | ||||
| } else { | } else { | ||||
| console.error('地图容器元素未找到'); | console.error('地图容器元素未找到'); | ||||
| } | } | ||||
| const initMap = () => { | const initMap = () => { | ||||
| let center = new TMap.LatLng(39.984104, 116.307503);//设置中心点坐标 | |||||
| let center = new TMap.LatLng(detail.value.contact.latitude,detail.value.contact.longitude);//设置中心点坐标 | |||||
| //初始化地图 | //初始化地图 | ||||
| let map = new TMap.Map(mapJob.value, { | let map = new TMap.Map(mapJob.value, { | ||||
| center: center | center: center | ||||
| }); | }); | ||||
| //创建并初始化MultiMarker | //创建并初始化MultiMarker | ||||
| let markerLayer = new TMap.MultiMarker({ | let markerLayer = new TMap.MultiMarker({ | ||||
| map: map, //指定地图容器 | map: map, //指定地图容器 | ||||
| "anchor": { x: 16, y: 32 } | "anchor": { x: 16, y: 32 } | ||||
| }) | }) | ||||
| }, | }, | ||||
| //点标记数据数组 longitude | //点标记数据数组 longitude | ||||
| geometries: [{ | geometries: [{ | ||||
| "id": "1", //点标记唯一标识,后续如果有删除、修改位置等操作,都需要此id | "id": "1", //点标记唯一标识,后续如果有删除、修改位置等操作,都需要此id | ||||
| "styleId": 'myStyle', //指定样式id | |||||
| "position": new TMap.LatLng(sessionStorage.getItem('lat'), sessionStorage.getItem('lng')), //点标记坐标位置 | |||||
| "styleId": 'myStyle', //指定样式id && | |||||
| "position": new TMap.LatLng(detail.value.contact.latitude,detail.value.contact.longitude), //点标记坐标位置 | |||||
| "properties": {//自定义属性 | "properties": {//自定义属性 | ||||
| "title": "marker1" | "title": "marker1" | ||||
| } | } | ||||
| .map-container { | .map-container { | ||||
| width: 100%; | width: 100%; | ||||
| height: 400px; | |||||
| height: 600px; | |||||
| } | } | ||||
| </style> | </style> |
| <template> | <template> | ||||
| <a-row :gutter="[10,10]"> | <a-row :gutter="[10,10]"> | ||||
| <a-col span="8" v-for="(item, index) in jobList"> | <a-col span="8" v-for="(item, index) in jobList"> | ||||
| <a-card hoverable style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;" @click="toDetail(item.id, item.company_id)"> | |||||
| <a-card hoverable style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;" | |||||
| > | |||||
| <a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;"> | <a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;"> | ||||
| <a-space direction="vertical" :size="20"> | <a-space direction="vertical" :size="20"> | ||||
| <a-flex justify="space-between" style="width: 100%;"> | <a-flex justify="space-between" style="width: 100%;"> | ||||
| <div style="font-size: 18px; font-weight: 600;">{{item.name}}</div> | |||||
| <div style="font-size: 18px; font-weight: 600;" @click="toDetail(item.id, item.company_id)">{{item.name}}</div> | |||||
| <div style="color: #4FBE70;font-size: 18px;">{{item.pay_range_text}}</div> | <div style="color: #4FBE70;font-size: 18px;">{{item.pay_range_text}}</div> | ||||
| </a-flex> | </a-flex> | ||||
| <a-flex style="width: 100%;"> | <a-flex style="width: 100%;"> | ||||
| <a-divider /> | <a-divider /> | ||||
| <a-space direction="vertical"> | <a-space direction="vertical"> | ||||
| <a-flex justify="space-between" style="width: 100%;"> | <a-flex justify="space-between" style="width: 100%;"> | ||||
| <div>{{item.full_name}}</div> | |||||
| <a-button type="primary" size="small" | |||||
| >查看详情</a-button> | |||||
| <div style="font-weight: 600;" @click="toCompany(item.id, item.company_id)">{{item.full_name}}</div> | |||||
| <a-button type="primary" size="small" @click="toDetail(item.id, item.company_id)">查看详情</a-button> | |||||
| </a-flex> | </a-flex> | ||||
| <a-flex style="width: 100%;color: #BEBEBE;"> | <a-flex style="width: 100%;color: #BEBEBE;"> | ||||
| {{item.locations ? item.locations[0].name : '未知地址'}} | {{item.locations ? item.locations[0].name : '未知地址'}} | ||||
| let props = defineProps(['list']); | let props = defineProps(['list']); | ||||
| let jobList = ref<Object[]>([]) | let jobList = ref<Object[]>([]) | ||||
| const toCompany = (job_id : Number, company_id : Number) => { | |||||
| sessionStorage.setItem('job_id', job_id) | |||||
| sessionStorage.setItem('tab_key', 1) | |||||
| sessionStorage.setItem('pubilc_id', company_id) | |||||
| sessionStorage.setItem('mode', 'detail') | |||||
| router.push({ | |||||
| path: '/personal' | |||||
| }) | |||||
| } | |||||
| const toDetail = (job_id : Number, company_id : Number) => { | const toDetail = (job_id : Number, company_id : Number) => { | ||||
| sessionStorage.setItem('job_id', job_id) | sessionStorage.setItem('job_id', job_id) | ||||
| sessionStorage.setItem('tab_key', 2) | sessionStorage.setItem('tab_key', 2) | ||||
| :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; | ||||
| } | } |
| </div> | </div> | ||||
| </template> | </template> | ||||
| <a-space direction="vertical" style="cursor: pointer;" :size="20"> | <a-space direction="vertical" style="cursor: pointer;" :size="20"> | ||||
| <template v-for="(item,index) in articleList"> | |||||
| <template v-for="(item,index) in articleList" > | |||||
| <a-flex v-if="index + 1 == 1" align="center"> | <a-flex v-if="index + 1 == 1" align="center"> | ||||
| <a-space> | |||||
| <a-space @click="toArticle(item)"> | |||||
| <a-avatar :size="26" style="background-color: #ff1a1a"> | <a-avatar :size="26" style="background-color: #ff1a1a"> | ||||
| <a-flex justify="center" align="center"> | <a-flex justify="center" align="center"> | ||||
| <span style="font-size: 14px;font-weight: bold;">{{index + 1}}</span> | <span style="font-size: 14px;font-weight: bold;">{{index + 1}}</span> | ||||
| <div style="font-size: 16px;">{{ item.title }}</div> | <div style="font-size: 16px;">{{ item.title }}</div> | ||||
| </a-space> | </a-space> | ||||
| </a-flex> | </a-flex> | ||||
| <a-flex v-if="index + 1 == 2" align="center" style="width: 100%;"> | |||||
| <a-space> | |||||
| <a-flex v-if="index + 1 == 2" align="center" style="width: 100%;" > | |||||
| <a-space @click="toArticle(item)"> | |||||
| <a-avatar :size="26" style="background-color: #ff4d4d"> | <a-avatar :size="26" style="background-color: #ff4d4d"> | ||||
| <a-flex justify="center" align="center"> | <a-flex justify="center" align="center"> | ||||
| <span style="font-size: 14px;font-weight: bold;">{{index + 1}}</span> | <span style="font-size: 14px;font-weight: bold;">{{index + 1}}</span> | ||||
| </a-space> | </a-space> | ||||
| </a-flex> | </a-flex> | ||||
| <a-flex v-if="index + 1 == 3" align="center" style="width: 100%;"> | |||||
| <a-space> | |||||
| <a-flex v-if="index + 1 == 3" align="center" style="width: 100%;" > | |||||
| <a-space @click="toArticle(item)"> | |||||
| <a-avatar :size="26" style="background-color: #ff6b6b"> | <a-avatar :size="26" style="background-color: #ff6b6b"> | ||||
| <a-flex justify="center" align="center"> | <a-flex justify="center" align="center"> | ||||
| <span style="font-size: 14px;font-weight: bold;">{{index + 1}}</span> | <span style="font-size: 14px;font-weight: bold;">{{index + 1}}</span> | ||||
| </a-space> | </a-space> | ||||
| </a-flex> | </a-flex> | ||||
| <a-flex v-if="index + 1 >= 4" align="center" style="width: 100%;"> | |||||
| <a-space> | |||||
| <a-flex v-if="index + 1 >= 4" align="center" style="width: 100%;" > | |||||
| <a-space @click="toArticle(item)"> | |||||
| <a-avatar :size="26"> | <a-avatar :size="26"> | ||||
| <a-flex justify="center" align="center"> | <a-flex justify="center" align="center"> | ||||
| <span style="font-size: 14px;font-weight: bold;">{{index + 1}}</span> | <span style="font-size: 14px;font-weight: bold;">{{index + 1}}</span> | ||||
| path: '/personal' | path: '/personal' | ||||
| }) | }) | ||||
| } | } | ||||
| const toArticle = (item) => { | |||||
| sessionStorage.setItem('article_data', JSON.stringify(item)) | |||||
| router.push({ | |||||
| path: '/information' | |||||
| }) | |||||
| } | |||||
| onMounted(() => { | onMounted(() => { |
| <template v-else> | <template v-else> | ||||
| <a-row :gutter="[10,20]" > | <a-row :gutter="[10,20]" > | ||||
| <a-col span="8" v-for="(item, index) in jobList"> | <a-col span="8" v-for="(item, index) in jobList"> | ||||
| <a-card hoverable @click="toDetail(item.id, item.company_id)"> | |||||
| <a-card hoverable > | |||||
| <a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;border-radius: 8px;" > | <a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;border-radius: 8px;" > | ||||
| <a-space direction="vertical" :size="10"> | <a-space direction="vertical" :size="10"> | ||||
| <a-flex justify="space-between" style="width: 100%;"> | <a-flex justify="space-between" style="width: 100%;"> | ||||
| <div style="font-size: 18px; font-weight: 600;">{{item.name}}</div> | |||||
| <div style="font-size: 18px; font-weight: 600;" @click="toDetail(item.id, item.company_id)">{{item.name}}</div> | |||||
| <div style="color: #4FBE70;">{{item.pay_range_text}}</div> | <div style="color: #4FBE70;">{{item.pay_range_text}}</div> | ||||
| </a-flex> | </a-flex> | ||||
| <a-flex style="width: 100%;"> | <a-flex style="width: 100%;"> | ||||
| <a-divider /> | <a-divider /> | ||||
| <a-space direction="vertical"> | <a-space direction="vertical"> | ||||
| <a-flex justify="space-between" style="width: 100%;"> | <a-flex justify="space-between" style="width: 100%;"> | ||||
| <div>{{item.full_name}}</div> | |||||
| <!-- <a-button type="primary" size="small">查看详情</a-button> --> | |||||
| <div style="font-weight: 600;">{{item.full_name}}</div> | |||||
| <a-button type="primary" size="small" @click="toDetail(item.id, item.company_id)">查看详情</a-button> | |||||
| </a-flex> | </a-flex> | ||||
| <a-flex style="width: 100%;color: #bebebe;"> | <a-flex style="width: 100%;color: #bebebe;"> | ||||
| {{item.locations ? item.locations[0].name : '未知地址'}} | {{item.locations ? item.locations[0].name : '未知地址'}} |
| </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> | ||||
| <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-page-header> | </a-page-header> | ||||
| </template> | </template> | ||||
| <template v-else> | <template v-else> | ||||
| .company-box { | .company-box { | ||||
| width: 100%; | width: 100%; | ||||
| padding: 20px; | padding: 20px; | ||||
| margin: 20px 0; | |||||
| cursor: pointer; | cursor: pointer; | ||||
| border: 1px solid #f0f0f0; | border: 1px solid #f0f0f0; | ||||
| border-radius: 8px; | border-radius: 8px; |
| </a-col> | </a-col> | ||||
| <a-col span="6"> | <a-col span="6"> | ||||
| <image-container | <image-container | ||||
| :imgObj="{src: 'https://rcsc-test.jcjob.cn/img'+detail.photo ,width: '150px',height:'210px'}"></image-container> | |||||
| :imgObj="{src: detail.photo? imageprefix+detail.photo : '/images/gongzhonghao.png' ,width: '150px',height:'210px'}"></image-container> | |||||
| </a-col> | </a-col> | ||||
| </a-row> | </a-row> | ||||
| </a-col> | </a-col> | ||||
| import { GetJobseekerDetail, GetJobapplicantIntroductiondetail, PostJobapplicantTrainingdetail, PostJobapplicantDesireindustrydetail, PostJobapplicantExperiencedetail } from '@/apis/models'; | import { GetJobseekerDetail, GetJobapplicantIntroductiondetail, PostJobapplicantTrainingdetail, PostJobapplicantDesireindustrydetail, PostJobapplicantExperiencedetail } from '@/apis/models'; | ||||
| import { message } from 'ant-design-vue'; | import { message } from 'ant-design-vue'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| let { store, commomParams, hideOtherModal1, openOtherModel_1 } = useCommon(); | |||||
| let { store, commomParams, hideOtherModal1, openOtherModel_1, imageprefix} = useCommon(); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| let props = defineProps(['detail_record']); | let props = defineProps(['detail_record']); | ||||
| let detailTitle = ref<String>('') | let detailTitle = ref<String>('') |
| :deep(.ant-menu-item-active) { | :deep(.ant-menu-item-active) { | ||||
| color: #4FBE70 !important; | color: #4FBE70 !important; | ||||
| background-color: #ffffff !important; | |||||
| /* background-color: #ffffff !important; */ | |||||
| } | } | ||||
| :deep(.ant-menu-item-active::after) { | :deep(.ant-menu-item-active::after) { |
| dataIndex: 'open_date' | dataIndex: 'open_date' | ||||
| }, { | }, { | ||||
| title: '开通状态', | title: '开通状态', | ||||
| dataIndex: 'status' | |||||
| dataIndex: 'status', | |||||
| }, | }, | ||||
| { | { | ||||
| title: '操作', | title: '操作', |
| <a-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></a-search> | <a-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></a-search> | ||||
| <a-card title="转换验证码"> | <a-card title="转换验证码"> | ||||
| <template #extra> | <template #extra> | ||||
| <a-button @click="getCode">生成验证码</a-button> | |||||
| <a-button @click="getCode" type="primary" size="large">生成验证码</a-button> | |||||
| </template> | </template> | ||||
| <a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | <a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | ||||
| @page="getPage" :loading="loading"> | @page="getPage" :loading="loading"> |
| </a-col> | </a-col> | ||||
| <a-col span="24"> | <a-col span="24"> | ||||
| <a-form-item label="保存"> | <a-form-item label="保存"> | ||||
| <a-button type="primary" block @click="saveForm">保存</a-button> | |||||
| <a-button type="primary" block @click="saveForm" size="large">保存</a-button> | |||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| </a-row> | </a-row> |
| 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> |
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, onMounted, computed, watch ,onBeforeUnmount} 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}, { title: '热门资讯', key: 1}]) | |||||
| let curKey = ref<Number>(3) | let curKey = ref<Number>(3) | ||||
| let selectedKeys = ref<Number[]>([3]) | let selectedKeys = ref<Number[]>([3]) | ||||
| const changeKey = (data) => { | const changeKey = (data) => { | ||||
| curKey.value = data.key; | curKey.value = data.key; | ||||
| } | } | ||||
| onMounted(() => { | onMounted(() => { | ||||
| if (sessionStorage.getItem('section_id')) { | |||||
| selectedKeys.value = [sessionStorage.getItem('section_id')] | |||||
| if(sessionStorage.getItem('article_data')) { | |||||
| selectedKeys.value = [1]; | |||||
| curKey.value = 1; | |||||
| } | } | ||||
| }) | }) | ||||
| onBeforeUnmount(() => { | onBeforeUnmount(() => { | ||||
| sessionStorage.removeItem('section_id') | |||||
| sessionStorage.removeItem('acticle_id') | |||||
| sessionStorage.removeItem('article_data') | |||||
| }) | }) | ||||
| </script> | </script> | ||||
| <style> | <style> |
| } | } | ||||
| } | } | ||||
| const initMap = () => { | const initMap = () => { | ||||
| var center = new TMap.LatLng(39.984104, 116.307503);//设置中心点坐标 | |||||
| console.log(companyDetail.value.latitude, companyDetail.value.longitude) | |||||
| var center = new TMap.LatLng(companyDetail.value.latitude, companyDetail.value.longitude);//设置中心点坐标 | |||||
| //初始化地图 | //初始化地图 | ||||
| var map = new TMap.Map(mapContainer.value, { | var map = new TMap.Map(mapContainer.value, { | ||||
| center: center | center: center | ||||
| }) | }) | ||||
| getJobCompanyjobs(current.value) | getJobCompanyjobs(current.value) | ||||
| } | } | ||||
| } else { | |||||
| initMap() | |||||
| } | } | ||||
| }) | }) | ||||
| import ResumeRead from '@/components/company/resume/read/index.vue' | import ResumeRead from '@/components/company/resume/read/index.vue' | ||||
| import ResumeRecycle from '@/components/company/resume/recycle/index.vue' | import ResumeRecycle from '@/components/company/resume/recycle/index.vue' | ||||
| let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | ||||
| let menu_list = ref([{ title: '收到的应聘简历', key: 1 }, { title: '邀请面试简历', key: 2 }, { title: '已查看联系方式', key: 3 }, { title: '企业人才库', key: 4 }, { title: '简历回收站', key: 5 }]) | |||||
| let menu_list = ref([{ title: '收到的应聘简历', key: 1 }, { title: '邀请面试的简历', key: 2 }, { title: '已查看联系方式', key: 3 }, { title: '企业人才库', key: 4 }, { title: '简历回收站', key: 5 }]) | |||||
| let curKey = ref<Number>(1) | let curKey = ref<Number>(1) | ||||
| const changeKey = (data) => { | const changeKey = (data) => { | ||||
| curKey.value = data.key; | curKey.value = data.key; |