提交 8cb40226 authored 作者: 刘旭's avatar 刘旭

更新代码

上级 a1d48a04
...@@ -62,6 +62,9 @@ ...@@ -62,6 +62,9 @@
</div> </div>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item v-if="JSON.stringify(personalInfo) !== '{}'" @click="toUserResume"
>个人信息</el-dropdown-item
>
<el-dropdown-item @click="logout">退出登录</el-dropdown-item> <el-dropdown-item @click="logout">退出登录</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
...@@ -105,6 +108,10 @@ const login = () => { ...@@ -105,6 +108,10 @@ const login = () => {
if (token.value) return if (token.value) return
show.value = true show.value = true
} }
const toUserResume = () => {
router.push('/recruitmentManagement/editResume')
}
const logout = () => { const logout = () => {
userInfoStore.$reset() userInfoStore.$reset()
globalStore.$reset() globalStore.$reset()
......
...@@ -81,9 +81,10 @@ const mouseleave = () => { ...@@ -81,9 +81,10 @@ const mouseleave = () => {
const handleChange = (item: any) => { const handleChange = (item: any) => {
dropdownRef.value.style.display = 'none' dropdownRef.value.style.display = 'none'
if (item.FENTRYID === props.modelValue) return emits('update:modelValue', '') if (item.FENTRYID === props.modelValue) {
emits('update:modelValue', item.FENTRYID) emits('update:modelValue', '')
emits('change', item.FENTRYID) } else emits('update:modelValue', item.FENTRYID)
emits('change')
} }
</script> </script>
......
...@@ -12,10 +12,14 @@ ...@@ -12,10 +12,14 @@
index + 1 index + 1
}}</span> }}</span>
<el-link>{{ item.FTITLE }}</el-link> <el-link>{{ item.FTITLE }}</el-link>
<img v-show="index < 3" src="@/assets/img/icon-new.png" width="28" height="15" alt="" /> <img v-show="index < 3" src="@/assets/img/icon-new.png" width="28" height="15" />
</div> </div>
<div v-show="isMore" class="policy-footer" @click="seeMore"> <div v-if="isMore" class="policy-footer">
查看更多<el-icon><i-ep-DArrowRight /></el-icon> <span v-if="list.length >= params.total" style="cursor: no-drop">没有更多了</span>
<div v-else style="display: flex; align-items: center" @click="seeMore">
查看更多
<el-icon color="#177CFA"><i-ep-DArrowRight /></el-icon>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -31,6 +35,10 @@ defineProps({ ...@@ -31,6 +35,10 @@ defineProps({
type: Array, type: Array,
default: () => [] default: () => []
} as any, } as any,
params: {
type: Object,
default: () => {}
} as any,
isMore: { isMore: {
type: Boolean, type: Boolean,
default: false default: false
...@@ -119,7 +127,7 @@ const seeMore = () => { ...@@ -119,7 +127,7 @@ const seeMore = () => {
justify-content: flex-end; justify-content: flex-end;
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
color: #05a8ff; color: #177cfa;
cursor: pointer; cursor: pointer;
} }
} }
......
<template> <template>
<el-dialog :modelValue="show" :title="title" @close="handleClose"> <el-dialog :modelValue="show" width="850" :title="title" @close="handleClose">
<div style="display: flex; justify-content: center; width: 100%"> <div class="preview-content" style="height: calc(100vh - 182px)">
<vue-office-docx <vue-office-docx
v-if="suffix === 'docx'" v-if="suffix === 'docx'"
:src="url" :src="url"
style="height: 100vh" style="height: calc(100vh - 182px); width: 810px"
@rendered="rendered" @rendered="rendered"
/> />
<iframe <iframe
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
<vue-office-pdf <vue-office-pdf
v-else-if="suffix === 'pdf'" v-else-if="suffix === 'pdf'"
:src="url" :src="url"
style="height: calc(100vh - 182px)"
@rendered="renderedHandler" @rendered="renderedHandler"
@error="errorHandler" @error="errorHandler"
/> />
...@@ -76,7 +77,12 @@ const handleClose = () => { ...@@ -76,7 +77,12 @@ const handleClose = () => {
<style lang="scss" scoped> <style lang="scss" scoped>
.child { .child {
width: 100%; width: 100%;
height: calc(100vh - 70px); height: calc(100vh - 182px);
border: 0; }
.preview-content {
display: flex;
justify-content: center;
width: 100%;
height: calc(100vh - 182px);
} }
</style> </style>
...@@ -29,3 +29,11 @@ export const getInformation = (data: any) => { ...@@ -29,3 +29,11 @@ export const getInformation = (data: any) => {
data data
) )
} }
// 查询海报
export const getPoster = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SelectPoster,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
...@@ -118,3 +118,10 @@ export const deleteResume = (data: any) => { ...@@ -118,3 +118,10 @@ export const deleteResume = (data: any) => {
data data
) )
} }
export const getHotPosition = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeHotJobPage,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
...@@ -6,3 +6,10 @@ export const getStreet = () => { ...@@ -6,3 +6,10 @@ export const getStreet = () => {
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeStreet,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc' '/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeStreet,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
) )
} }
// 街道办资料
export const getStreetPosition = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeStreetRecruitmentPage,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
</div> </div>
<div v-else-if="index === 5" class="live-broadcast"> <div v-else-if="index === 5" class="live-broadcast">
<div v-for="col in 6" :key="col" class="live-broadcast-item"> <div v-for="col in 6" :key="col" class="live-broadcast-item">
<img src="@/assets/img/Frame377.png" height="214" /> <img src="@/assets/img/Banner.png" height="214" />
<p> <p>
有时候,上天没有给你想要的,不是因为你不配,而是你值得更好的 有时候,上天没有给你想要的,不是因为你不配,而是你值得更好的
有时候,上天没有给你想要的,不是因为你不配,而是你值得更好的 有时候,上天没有给你想要的,不是因为你不配,而是你值得更好的
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
</div> </div>
<div v-else-if="index === 6" class="flx-direction-column"> <div v-else-if="index === 6" class="flx-direction-column">
<div v-for="col in 5" :key="col" class="entrepreneurship-item"> <div v-for="col in 5" :key="col" class="entrepreneurship-item">
<img src="@/assets/img/Frame379.png" /> <img src="@/assets/img/Banner.png" />
<div class="entrepreneurship-item-rg"> <div class="entrepreneurship-item-rg">
Lorem ipsum dolor sit amet, consectetur adipiscingelit. Aenean euismod bibendum Lorem ipsum dolor sit amet, consectetur adipiscingelit. Aenean euismod bibendum
laoreet. Proin gravidadolor sit amet lacus accumsan et viverra justocommodo. Proin laoreet. Proin gravidadolor sit amet lacus accumsan et viverra justocommodo. Proin
......
.skill-container {
width: 100%;
.container {
width: 1316px;
text-align: center;
img {
width: 100%;
margin-top: 24px;
border-radius: 12px;
}
.train-list {
display: flex;
margin: 24px 0;
border: 1px solid #177cfa;
border-radius: 8px;
.train-item {
flex: 0 0 20%;
height: 58px;
line-height: 58px;
border-right: 1px solid #177cfa;
font-size: 24px;
font-weight: 500;
color: #177cfa;
&:nth-child(5) {
border-right: 0;
}
}
}
}
}
<template> <template>
<div>对口帮扶</div> <div v-loading="loading" class="skill-container flx-center">
<div class="container">
<img :src="baseURL + '/' + commonData?.HbData?.[0].FPOSTERPICTURE" height="560" />
<div style="margin: 24px 0 360px">
<contentBlock :list="commonData?.GaQnData" @change="handleChange" />
</div>
</div>
</div>
</template> </template>
<script setup lang="ts"></script> <script setup lang="ts">
import { baseURL } from '@/services'
import { getCommon } from '@/services/api/common'
import contentBlock from '@/components/contentBlock.vue'
<style scoped></style> const router = useRouter()
const loading = ref(true)
const queryList = ref({ pageIndex: 1, pageSize: 10, FormType: 'N' })
const commonData: any = ref()
const handleChange = (row: any) => {
router.push({ path: '/commonDetail', query: { FID: row.FID, FormType: 'N', FTITLE: row.FTITLE } })
}
const init = async () => {
const res: any = await getCommon(queryList.value)
if (res.code === 200) {
commonData.value = res.data
loading.value = false
}
}
init()
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>
...@@ -16,8 +16,12 @@ ...@@ -16,8 +16,12 @@
<img v-show="index < 3" src="@/assets/img/icon-new.png" width="28" height="15" alt="" /> <img v-show="index < 3" src="@/assets/img/icon-new.png" width="28" height="15" alt="" />
</div> </div>
</div> </div>
<div v-show="isMore" class="flexible-footer" @click="seeMore"> <div v-show="isMore" class="flexible-footer">
查看更多<el-icon><i-ep-DArrowRight /></el-icon> <span v-if="list.length >= params.total" style="cursor: no-drop">没有更多了</span>
<div v-else style="display: flex; align-items: center" @click="seeMore">
查看更多
<el-icon color="#177CFA"><i-ep-DArrowRight /></el-icon>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -33,6 +37,10 @@ defineProps({ ...@@ -33,6 +37,10 @@ defineProps({
type: Array, type: Array,
default: () => [] default: () => []
} as any, } as any,
params: {
type: Object,
default: () => {}
} as any,
isMore: { isMore: {
type: Boolean, type: Boolean,
default: false default: false
...@@ -56,8 +64,8 @@ const seeMore = () => { ...@@ -56,8 +64,8 @@ const seeMore = () => {
flex: 0 0 calc((100% - 50px) / 3); flex: 0 0 calc((100% - 50px) / 3);
margin: 0 25px 50px 0; margin: 0 25px 50px 0;
padding-top: 16px; padding-top: 16px;
background: #ffffff; // background: #ffffff;
box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.05); // box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.05);
border-radius: 8px; border-radius: 8px;
box-sizing: border-box; box-sizing: border-box;
.flexible-top { .flexible-top {
......
<template> <template>
<div v-loading="loading" class="flexible-container"> <div v-loading="loading" class="flexible-container">
<div class="container"> <div class="container">
<img :src="baseURL + '/' + flexibleData?.HbData?.[0].FPOSTERPICTURE" height="560" /> <img :src="baseURL + '/' + flexibleData?.HbData?.[0]?.FPOSTERPICTURE" height="560" />
<div class="flexible-list"> <div class="flexible-list">
<flexible <flexible
v-for="(item, index) in flexibleNameList" v-for="(item, index) in flexibleNameList"
:key="index" :key="index"
:title="item.name" :title="item.name"
:list="flexibleData?.[item.field]" :list="flexibleData?.[item.field]"
:params="paramsData?.[item.field]"
is-more is-more
@change="flexibleChange" @change="flexibleChange"
@see-more="seeMore(item.field)"
/> />
</div> </div>
<el-input v-model="searchValue" placeholder="搜索关键词" @change="search"> <el-input v-model="searchValue" placeholder="搜索关键词" @change="search">
...@@ -86,7 +88,11 @@ ...@@ -86,7 +88,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { baseURL } from '@/services' import { baseURL } from '@/services'
import { getPositionList, getFlexibleEmploym } from '@/services/api/flexibleEmploym' import {
getPositionList,
getFlexibleEmploym,
getFlexibleEmploymList
} from '@/services/api/flexibleEmploym'
import { useJobDetailStore } from '@/stores/modules/jobDetails' import { useJobDetailStore } from '@/stores/modules/jobDetails'
import flexible from '@/views/flexibleEmploym/components/flexible.vue' import flexible from '@/views/flexibleEmploym/components/flexible.vue'
...@@ -118,7 +124,18 @@ const searchValue = ref('') ...@@ -118,7 +124,18 @@ const searchValue = ref('')
const loading = ref(true) const loading = ref(true)
const flexibleLoading = ref(false) const flexibleLoading = ref(false)
const queryList = ref({ pageIndex: 1, pageSize: 10 }) const queryList = ref({ pageIndex: 1, pageSize: 10 })
const flexibleData: any = ref() const flexibleData: any = ref({
HbData: [],
GgData: [],
ZcData: [],
XwData: []
})
const paramsData = reactive({
GgData: { pageIndex: 1, pageSize: 0, total: 0 },
ZcData: { pageIndex: 1, pageSize: 0, total: 0 },
XwData: { pageIndex: 1, pageSize: 0, total: 0 }
}) as any
const flexibleNameList = [ const flexibleNameList = [
{ name: '公告', field: 'GgData' }, { name: '公告', field: 'GgData' },
...@@ -130,6 +147,29 @@ const flexibleChange = (row: any) => { ...@@ -130,6 +147,29 @@ const flexibleChange = (row: any) => {
router.push({ path: '/commonDetail', query: { FID: row.FID, FormType: 'D', FTITLE: row.FTITLE } }) router.push({ path: '/commonDetail', query: { FID: row.FID, FormType: 'D', FTITLE: row.FTITLE } })
} }
const seeMore = (Type: string) => {
switch (Type) {
case 'GgData':
if (paramsData.GgData.pageSize <= paramsData.GgData.total) {
paramsData.GgData.pageSize += 10
initFlexibleEmploymList({ ...paramsData.GgData, Type: 'A' })
}
break
case 'ZcData':
if (paramsData.ZcData.pageSize <= paramsData.ZcData.total) {
paramsData.ZcData.pageSize += 10
initFlexibleEmploymList({ ...paramsData.ZcData, Type: 'B' })
}
break
default:
if (paramsData.XwData.pageSize <= paramsData.XwData.total) {
paramsData.XwData.pageSize += 10
initFlexibleEmploymList({ ...paramsData.XwData, Type: 'C' })
}
break
}
}
const handleChange = (name: number) => { const handleChange = (name: number) => {
listQuery.obj.postName = tabsList[name].label listQuery.obj.postName = tabsList[name].label
initPosition() initPosition()
...@@ -144,6 +184,26 @@ const search = () => { ...@@ -144,6 +184,26 @@ const search = () => {
initPosition() initPosition()
} }
const initFlexibleEmploymList = async (params: any) => {
const res: any = await getFlexibleEmploymList(params)
if (res.code === 200) {
switch (params.Type) {
case 'A':
flexibleData.value.GgData = res.data || []
paramsData.GgData.total = res.total
break
case 'B':
flexibleData.value.ZcData = res.data || []
paramsData.ZcData.total = res.total
break
default:
flexibleData.value.XwData = res.data || []
paramsData.XwData.total = res.total
break
}
console.log(paramsData)
}
}
const initPosition = async () => { const initPosition = async () => {
flexibleLoading.value = true flexibleLoading.value = true
const res: any = await getPositionList(listQuery) const res: any = await getPositionList(listQuery)
...@@ -156,10 +216,12 @@ const initPosition = async () => { ...@@ -156,10 +216,12 @@ const initPosition = async () => {
const init = async () => { const init = async () => {
const res: any = await getFlexibleEmploym(queryList.value) const res: any = await getFlexibleEmploym(queryList.value)
if (res.code === 200) { if (res.code === 200) {
console.log(res) flexibleData.value.HbData = res.data?.HbData
flexibleData.value = res.data seeMore('GgData')
loading.value = false seeMore('ZcData')
seeMore('XwData')
initPosition() initPosition()
loading.value = false
} }
} }
......
...@@ -68,10 +68,12 @@ ...@@ -68,10 +68,12 @@
.employment-training { .employment-training {
width: 645px; width: 645px;
height: 400px;
text-align: center; text-align: center;
.employment { .employment {
margin-top: 24px; margin-top: 24px;
height: 326px;
box-sizing: border-box; box-sizing: border-box;
.employment-item { .employment-item {
...@@ -85,6 +87,9 @@ ...@@ -85,6 +87,9 @@
padding: 0 26px; padding: 0 26px;
margin-bottom: 15px; margin-bottom: 15px;
cursor: pointer; cursor: pointer;
&:last-child {
margin-bottom: 0;
}
} }
} }
.train { .train {
...@@ -110,21 +115,23 @@ ...@@ -110,21 +115,23 @@
.scene { .scene {
display: flex; display: flex;
flex-wrap: wrap; // flex-wrap: wrap;
margin: -5px; // margin: -5px;
margin-top: 24px; margin-top: 24px;
.scene-item { .scene-item {
cursor: pointer; cursor: pointer;
flex: 0 0 calc(16.666% - 10px); /* 让每个盒子占据六分之一的宽度,并且减去间距 */ width: 206px;
margin: 5px; /* 设置为盒子之间的间隔 */ height: 100px;
line-height: 100px;
box-sizing: border-box; /* 让盒子的边框和填充算入盒子的总宽度 */ box-sizing: border-box; /* 让盒子的边框和填充算入盒子的总宽度 */
padding: 13px 63px;
background: #ffffff; background: #ffffff;
border-radius: 12px; border-radius: 12px;
border: 1px solid rgba(23, 124, 250, 1); border: 1px solid rgba(23, 124, 250, 1);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center;
margin-right: 16px;
div { div {
height: 50px; height: 50px;
......
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
专业知识培训 专业知识培训
</div> </div>
</div> </div>
<div style="display: flex; margin: 18px 0"> <div style="display: flex; margin: 18px 0 0">
<div <div
style="position: relative; height: 100px; cursor: pointer" style="position: relative; height: 100px; cursor: pointer"
@click="toTtrain('D')" @click="toTtrain('D')"
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
<policy <policy
title="南山就业政策公告" title="南山就业政策公告"
:list="policyData.noticeData" :list="policyData.noticeData"
:params="policyData.noticeParams"
is-more is-more
@change="handleChange" @change="handleChange"
@see-more="seeMore(0)" @see-more="seeMore(0)"
...@@ -27,6 +28,7 @@ ...@@ -27,6 +28,7 @@
<policy <policy
title="南山就业活动" title="南山就业活动"
:list="policyData.activityData" :list="policyData.activityData"
:params="policyData.activityParams"
is-more is-more
@change="handleChange" @change="handleChange"
@see-more="seeMore(1)" @see-more="seeMore(1)"
...@@ -49,9 +51,9 @@ const queryList = ref({ pageIndex: 1, pageSize: 10 }) ...@@ -49,9 +51,9 @@ const queryList = ref({ pageIndex: 1, pageSize: 10 })
const policyData: any = reactive({ const policyData: any = reactive({
posterUrl: '', posterUrl: '',
noticeData: [] as any, noticeData: [] as any,
noticeParams: { pageIndex: 1, pageSize: 10, total: 10 }, noticeParams: { pageIndex: 1, pageSize: 0, total: 10 },
activityData: [] as any, activityData: [] as any,
activityParams: { pageIndex: 1, pageSize: 10, total: 10 } activityParams: { pageIndex: 1, pageSize: 0, total: 10 }
}) })
let timeout: ReturnType<typeof setTimeout> let timeout: ReturnType<typeof setTimeout>
...@@ -81,7 +83,7 @@ const search = (item: Record<string, any>) => { ...@@ -81,7 +83,7 @@ const search = (item: Record<string, any>) => {
const seeMore = async (Type: number) => { const seeMore = async (Type: number) => {
if (Type && policyData.activityParams.pageSize <= policyData.activityParams.total) { if (Type && policyData.activityParams.pageSize <= policyData.activityParams.total) {
policyData.activityParams.pageSize = policyData.activityParams.pageSize + 10 policyData.activityParams.pageSize += 10
const res: any = await getPolicyList({ ...policyData.activityParams, ...{ Type } }) const res: any = await getPolicyList({ ...policyData.activityParams, ...{ Type } })
if (res.code === 200) { if (res.code === 200) {
policyData.activityData = res.data policyData.activityData = res.data
...@@ -89,7 +91,7 @@ const seeMore = async (Type: number) => { ...@@ -89,7 +91,7 @@ const seeMore = async (Type: number) => {
} }
} }
if (!Type && policyData.noticeParams.pageSize <= policyData.noticeParams.total) { if (!Type && policyData.noticeParams.pageSize <= policyData.noticeParams.total) {
policyData.noticeParams.pageSize = policyData.noticeParams.pageSize + 10 policyData.noticeParams.pageSize += 10
const res: any = await getPolicyList({ ...policyData.noticeParams, ...{ Type } }) const res: any = await getPolicyList({ ...policyData.noticeParams, ...{ Type } })
if (res.code === 200) { if (res.code === 200) {
policyData.noticeData = res.data policyData.noticeData = res.data
...@@ -106,8 +108,8 @@ const init = async () => { ...@@ -106,8 +108,8 @@ const init = async () => {
const res: any = await getPolicy(queryList.value) const res: any = await getPolicy(queryList.value)
if (res.code === 200) { if (res.code === 200) {
policyData.posterUrl = res.data?.HbData?.[0].FPOSTERPICTURE policyData.posterUrl = res.data?.HbData?.[0].FPOSTERPICTURE
policyData.noticeData = res.data?.GgData seeMore(0)
policyData.activityData = res.data?.HdData seeMore(1)
loading.value = false loading.value = false
} }
} }
......
...@@ -6,14 +6,14 @@ ...@@ -6,14 +6,14 @@
</div> </div>
<div class="personal-info-ct"> <div class="personal-info-ct">
<span>年龄:{{ personalInfo?.AGE }}</span> <span>年龄:{{ personalInfo?.AGE }}</span>
<span>工作年限:2</span> <span>工作年限:{{ personalInfo?.FGOWORKCOUNT }}</span>
<span>学历:{{ personalInfo?.F_LQKJ_EDUCATIONS }}</span> <span>学历:{{ personalInfo?.FEDUCATIONBACKGROUND }}</span>
</div> </div>
<el-divider /> <el-divider />
<div class="personal-info-bt"> <div class="personal-info-bt">
<div class="personal-info-bt-item"> <div class="personal-info-bt-item">
<div class="personal-info-label">求职状态</div> <div class="personal-info-label">求职状态</div>
<span>{{ personalInfo?.F_LQKJ_DEPARTREMAIN }}</span> <span>{{ personalInfo?.FDEPARTREMAIN }}</span>
</div> </div>
<div class="personal-info-bt-item"> <div class="personal-info-bt-item">
<div class="personal-info-label">已投递</div> <div class="personal-info-label">已投递</div>
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
</div> </div>
<div class="personal-info-bt-item"> <div class="personal-info-bt-item">
<div class="personal-info-label">已面试</div> <div class="personal-info-label">已面试</div>
<span>{{ personalInfo?.InteriviewCount }}</span> <span>{{ personalInfo?.Interiview }}</span>
</div> </div>
</div> </div>
<div style="width: 100%; display: flex; justify-content: center"> <div style="width: 100%; display: flex; justify-content: center">
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
</div> </div>
<div v-if="positionData.length" class="position-list"> <div v-if="positionData.length" class="position-list">
<div v-for="item in positionData" :key="item.FID" class="position-item flx-justify-between"> <div v-for="item in positionData" :key="item.FID" class="position-item flx-justify-between">
<div> <div style="cursor: pointer" @click="preview(item.FID)">
<div class="position-title">{{ item.JobName }}</div> <div class="position-title">{{ item.JobName }}</div>
<div> <div>
<span class="position-label">{{ item.FEDUCATIONALBACKGROUND }}</span> <span class="position-label">{{ item.FEDUCATIONALBACKGROUND }}</span>
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
<el-divider direction="vertical" /> <el-divider direction="vertical" />
<span class="position-label" <span class="position-label"
>{{ item.FMINIMUMWAGE }}-{{ item.FMAXIMUMSALARY }}.{{ >{{ item.FMINIMUMWAGE }}-{{ item.FMAXIMUMSALARY }}.{{
item.FMONTHLYSALARY.replace('月', '') item.FMONTHLYSALARY?.replace('月', '薪')
}}</span }}</span
> >
<el-divider direction="vertical" /> <el-divider direction="vertical" />
<span class="position-label">{{ '全职' }}</span> <span class="position-label">{{ '全职' }}</span>
...@@ -98,7 +98,7 @@ const updatePosition = (FID: string) => { ...@@ -98,7 +98,7 @@ const updatePosition = (FID: string) => {
const preview = (FID: string) => { const preview = (FID: string) => {
initCompanyPositionDetail(FID) initCompanyPositionDetail(FID)
setTimeout(() => { setTimeout(() => {
console.log(positionDetailData.value) // console.log(positionDetailData.value)
previewShow.value = true previewShow.value = true
}, 100) }, 100)
} }
......
...@@ -10,7 +10,11 @@ ...@@ -10,7 +10,11 @@
<el-form-item label="公司:"> <el-form-item label="公司:">
<span>{{ positionItem?.FirmName }}</span> <span>{{ positionItem?.FirmName }}</span>
</el-form-item> </el-form-item>
<el-form-item label="招聘类型:"><span>校招</span></el-form-item> <el-form-item label="招聘类型:"
><span>{{
positionItem?.FRECRUITMENTTYPE === 'A' ? '社招' : '校招'
}}</span></el-form-item
>
<el-form-item label="职位名称:" <el-form-item label="职位名称:"
><span>{{ positionItem?.JobName }}</span></el-form-item ><span>{{ positionItem?.JobName }}</span></el-form-item
> >
...@@ -27,7 +31,7 @@ ...@@ -27,7 +31,7 @@
</div> </div>
<div style="margin-left: 42px"> <div style="margin-left: 42px">
<div class="flx-align-center"> <div class="flx-align-center">
<el-form-item label="经验和学历 :" <el-form-item label="经验和学历:"
><span>{{ positionItem?.FEXPERIENCE }}</span ><span>{{ positionItem?.FEXPERIENCE }}</span
><span ><span
style=" style="
...@@ -45,9 +49,9 @@ ...@@ -45,9 +49,9 @@
<div class="flx-align-center"> <div class="flx-align-center">
<el-form-item label="薪资范围:" <el-form-item label="薪资范围:"
><span> ><span>
{{ positionItem?.FMINIMUMWAGE }}-{{ {{ positionItem?.FMINIMUMWAGE }}-{{ positionItem?.FMAXIMUMSALARY }}&nbsp;&nbsp;{{
positionItem?.FMAXIMUMSALARY positionItem?.FMONTHLYSALARY?.replace('月', '薪')
}}&nbsp;&nbsp;13个月</span }}</span
></el-form-item ></el-form-item
> >
</div> </div>
...@@ -89,6 +93,7 @@ const handleClose = () => { ...@@ -89,6 +93,7 @@ const handleClose = () => {
<style lang="scss" scoped> <style lang="scss" scoped>
.el-form { .el-form {
padding-left: 60px; padding-left: 60px;
padding-right: 20px;
} }
.position-info { .position-info {
display: flex; display: flex;
......
...@@ -5,25 +5,29 @@ ...@@ -5,25 +5,29 @@
<img :src="baseURL + '/' + data?.FPhotosUrl" /> <img :src="baseURL + '/' + data?.FPhotosUrl" />
<div> <div>
<div class="resumen-content-header__tp"> <div class="resumen-content-header__tp">
<span class="name">{{ data?.Jbdata.FName }}</span> <span class="name">{{ data?.Jbdata.FName || '姓名' }}</span>
<span>{{ data?.Jbdata.Age + '岁' }}</span> <span>{{ data?.Jbdata.Age ? data?.Jbdata.Age + '岁' : '' }}</span>
<el-divider direction="vertical" /> <el-divider v-if="data?.Jbdata.Age" direction="vertical" />
<span>{{ data?.Jbdata.FSex === '0' ? '男' : '女' }}</span> <span>{{ data?.Jbdata.FSex === '0' ? '男' : '女' }}</span>
<el-divider direction="vertical" /> <el-divider v-if="data?.Jbdata.FSex" direction="vertical" />
<span>{{ <span>{{
data?.Jbdata.FGoWorkCount > 10 ? '10年以上经验' : data?.Jbdata.FGoWorkCount + '年' data?.Jbdata.FGoWorkCount
? data?.Jbdata.FGoWorkCount > 10
? '10年以上经验'
: data?.Jbdata.FGoWorkCount + '年'
: ''
}}</span> }}</span>
<el-divider direction="vertical" /> <el-divider v-if="data?.Jbdata.FGoWorkCount" direction="vertical" />
<span>{{ data?.Jbdata.FEducationBackground }}</span> <span>{{ data?.Jbdata.FEducationBackground }}</span>
<el-divider direction="vertical" /> <el-divider v-if="data?.Jbdata.FEducationBackground" direction="vertical" />
<span>{{ selectDepartRemain(data?.Jbdata.FDepartRemain) }}</span> <span>{{ selectDepartRemain(data?.Jbdata.FDepartRemain) }}</span>
</div> </div>
<pre>{{ data?.Jbdata.FPersonalStrengths }}</pre> <pre>{{ data?.Jbdata.FPersonalStrengths }}</pre>
</div> </div>
</div> </div>
<!-- 期望职位 -->
<div class="resumen-content-footer"> <div class="resumen-content-footer">
<div style="display: flex; margin-bottom: 56px"> <!-- 期望职位 -->
<div v-if="data?.Qzdata?.length" style="display: flex; margin-bottom: 56px">
<div class="resume-label">期望职位</div> <div class="resume-label">期望职位</div>
<div class="flx-align-center"> <div class="flx-align-center">
<span>{{ data?.Qzdata[0].FDesiredPositionName }}</span> <span>{{ data?.Qzdata[0].FDesiredPositionName }}</span>
...@@ -40,7 +44,7 @@ ...@@ -40,7 +44,7 @@
</div> </div>
</div> </div>
<!-- 工作经历 --> <!-- 工作经历 -->
<div style="display: flex; margin-bottom: 32px"> <div v-if="data?.Gzdata.length" style="display: flex; margin-bottom: 32px">
<div class="resume-label">工作经历</div> <div class="resume-label">工作经历</div>
<div class="flx-direction-column" style="flex: 1"> <div class="flx-direction-column" style="flex: 1">
<div v-for="item in data?.Gzdata" :key="item.FEntryID"> <div v-for="item in data?.Gzdata" :key="item.FEntryID">
...@@ -72,7 +76,7 @@ ...@@ -72,7 +76,7 @@
</div> </div>
</div> </div>
<!-- 项目经历 --> <!-- 项目经历 -->
<div style="display: flex; margin-bottom: 56px"> <div v-if="data?.Xmdata.length" style="display: flex; margin-bottom: 56px">
<div class="resume-label">项目经历</div> <div class="resume-label">项目经历</div>
<div class="flx-direction-column" style="flex: 1"> <div class="flx-direction-column" style="flex: 1">
<div v-for="item in data?.Xmdata" :key="item.FEntryID"> <div v-for="item in data?.Xmdata" :key="item.FEntryID">
...@@ -83,8 +87,8 @@ ...@@ -83,8 +87,8 @@
<span>{{ item.FProjectRole }}</span> <span>{{ item.FProjectRole }}</span>
</div> </div>
<span style="color: #666666" <span style="color: #666666"
>{{ dayjs(item.FStartDate).format('YYYY.MM') }}-{{ >{{ dayjs(item.FProjectStartDate).format('YYYY.MM') }}-{{
dayjs(item.FEndDate).format('YYYY.MM') dayjs(item.FProjectEndDate).format('YYYY.MM')
}}</span }}</span
> >
</div> </div>
...@@ -93,7 +97,7 @@ ...@@ -93,7 +97,7 @@
</div> </div>
</div> </div>
<!-- 教育经历 --> <!-- 教育经历 -->
<div style="display: flex; margin-bottom: 56px"> <div v-if="data?.Jydata.length" style="display: flex; margin-bottom: 56px">
<div class="resume-label">教育经历</div> <div class="resume-label">教育经历</div>
<div class="flx-direction-column" style="flex: 1"> <div class="flx-direction-column" style="flex: 1">
<div v-for="item in data?.Jydata" :key="item.FEntryID"> <div v-for="item in data?.Jydata" :key="item.FEntryID">
...@@ -121,7 +125,7 @@ ...@@ -121,7 +125,7 @@
</div> </div>
</div> </div>
<div style="display: flex; margin-bottom: 56px"> <div v-if="data?.Fjdata.length" style="display: flex; margin-bottom: 56px">
<div class="resume-label">资格证书</div> <div class="resume-label">资格证书</div>
<div class="flx-direction-column" style="flex: 1"> <div class="flx-direction-column" style="flex: 1">
<div <div
...@@ -129,12 +133,13 @@ ...@@ -129,12 +133,13 @@
:key="item.FEntryID" :key="item.FEntryID"
class="flx-align-center" class="flx-align-center"
style="height: 44px; color: #177cfa; cursor: pointer" style="height: 44px; color: #177cfa; cursor: pointer"
@click="openFile(item)"
> >
{{ item.FATTACHMENTNAME }} {{ item.FATTACHMENTNAME }}
</div> </div>
</div> </div>
</div> </div>
<div style="display: flex; margin-bottom: 56px"> <div v-if="data?.Jldata.length" style="display: flex; margin-bottom: 56px">
<div class="resume-label">简历附件</div> <div class="resume-label">简历附件</div>
<div class="flx-direction-column" style="flex: 1"> <div class="flx-direction-column" style="flex: 1">
<div <div
...@@ -142,6 +147,7 @@ ...@@ -142,6 +147,7 @@
:key="item.FEntryID" :key="item.FEntryID"
class="flx-align-center" class="flx-align-center"
style="height: 44px; color: #177cfa; cursor: pointer" style="height: 44px; color: #177cfa; cursor: pointer"
@click="openFile(item)"
> >
{{ item.FATTACHMENTNAME }} {{ item.FATTACHMENTNAME }}
</div> </div>
...@@ -150,12 +156,20 @@ ...@@ -150,12 +156,20 @@
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<previewFile
v-model="state.previewFileShow"
:suffix="state.fileSuffix"
:url="state.fileUrl"
:title="state.previewTitle"
/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { jobStatus } from '../config' import { jobStatus } from '../config'
import { baseURL } from '@/services' import { baseURL } from '@/services'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import previewFile from '@/components/previewFile.vue'
defineProps({ defineProps({
show: { show: {
...@@ -169,10 +183,25 @@ defineProps({ ...@@ -169,10 +183,25 @@ defineProps({
}) })
const emits = defineEmits(['update:show']) const emits = defineEmits(['update:show'])
const state = reactive({
previewFileShow: false,
previewTitle: '',
fileSuffix: '',
fileUrl: ''
})
// 设置求职状态
const selectDepartRemain = (departRemain: string) => { const selectDepartRemain = (departRemain: string) => {
let row = jobStatus.find((item: any) => item.value === departRemain) let row = jobStatus.find((item: any) => item.value === departRemain)
return row ? row.label : jobStatus[3] return row ? row.label : jobStatus[3].label
}
// 预览简历
const openFile = (row: any) => {
state.fileSuffix = row.FATTACHMENTNAME.split('.')[row.FATTACHMENTNAME.split('.').length - 1]
state.fileUrl = baseURL + '/' + row.FFILEIDURL
state.previewTitle = row.FATTACHMENTNAME.split('.')[0]
state.previewFileShow = true
} }
const handleClose = () => { const handleClose = () => {
......
...@@ -105,7 +105,7 @@ const list = [ ...@@ -105,7 +105,7 @@ const list = [
{ name: '学历要求' }, { name: '学历要求' },
{ name: '院校要求' }, { name: '院校要求' },
{ name: '经验要求' }, { name: '经验要求' },
{ name: '年龄要求' } { name: '其他要求' }
] ]
const searchChange = (searchValue: string) => {} const searchChange = (searchValue: string) => {}
......
...@@ -18,11 +18,11 @@ ...@@ -18,11 +18,11 @@
<span>20岁</span> <span>20岁</span>
</div> </div>
<div class="flx-align-center"> <div class="flx-align-center">
<el-icon><i-ep-OfficeBuilding /></el-icon> <img src="@/assets/img/icon-learn-time.png" />
<span style="margin-left: 3px">在职求职中</span> <span style="margin-left: 3px">在职求职中</span>
</div> </div>
<div class="flx-align-center"> <div class="flx-align-center">
<el-icon><i-ep-OfficeBuilding /></el-icon> <img src="@/assets/img/icon-stutus.png" />
<span style="margin-left: 3px">2021-09至2024-07</span> <span style="margin-left: 3px">2021-09至2024-07</span>
</div> </div>
</div> </div>
...@@ -39,15 +39,15 @@ ...@@ -39,15 +39,15 @@
<el-dropdown-item>已录用</el-dropdown-item> <el-dropdown-item>已录用</el-dropdown-item>
<el-dropdown-item>已入职</el-dropdown-item> <el-dropdown-item>已入职</el-dropdown-item>
<el-dropdown-item>人才库</el-dropdown-item> <el-dropdown-item>人才库</el-dropdown-item>
<el-dropdown-item>黑名单</el-dropdown-item> <el-dropdown-item>人才储备</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
</div> </div>
<div class="recommend flx-align-center"> <!-- <div class="recommend flx-align-center">
推荐指数 推荐指数
<el-rate v-model="rateValue" style="margin-left: 8px" /> <el-rate v-model="rateValue" style="margin-left: 8px" />
</div> </div> -->
</div> </div>
</div> </div>
<div class="tab-item-bt flx-justify-between"> <div class="tab-item-bt flx-justify-between">
......
...@@ -165,7 +165,13 @@ const rules = { ...@@ -165,7 +165,13 @@ const rules = {
FMyIdentity: [{ required: true, message: '我的牛人身份不能为空', trigger: 'blur' }], FMyIdentity: [{ required: true, message: '我的牛人身份不能为空', trigger: 'blur' }],
FUserPhone: [ FUserPhone: [
{ required: true, message: '手机号不能为空', trigger: 'blur' }, { required: true, message: '手机号不能为空', trigger: 'blur' },
{ pattern: /^1[3456789]\d{9}$/, message: '请输入有效的手机号', trigger: 'blur' } {
message: '请输入有效的手机号',
trigger: 'blur',
pattern: (rule: any, value: any) => {
return !value || /^1\d{2}\*{4}\d{4}$/.test(value) || /^1[3456789]\d{9}$/.test(value)
}
}
] ]
} }
......
...@@ -31,16 +31,18 @@ export const filterList = ref([ ...@@ -31,16 +31,18 @@ export const filterList = ref([
} }
]) ])
export const recruitStatus = [ export const recruitStatus = computed(() => {
{ status: '简历未查看', value: companyInfo.value?.NotViewed + '份' }, return [
{ status: '简历待定', value: companyInfo.value?.Pending + '份' }, { status: '简历未查看', value: companyInfo.value?.NotViewed + '份' },
{ status: '安排面试', value: companyInfo.value?.Arrange + '份' }, { status: '简历待定', value: companyInfo.value?.Pending + '份' },
{ status: '已面试', value: companyInfo.value?.HaveInterview + '份' }, { status: '安排面试', value: companyInfo.value?.Arrange + '份' },
{ status: '已录用', value: companyInfo.value?.HaveHired + '份' }, { status: '已面试', value: companyInfo.value?.HaveInterview + '份' },
{ status: '已入职', value: companyInfo.value?.AlreadyBoard + '份' }, { status: '已录用', value: companyInfo.value?.HaveHired + '份' },
{ status: '人才库', value: companyInfo.value?.TalentPool + '份' }, { status: '已入职', value: companyInfo.value?.AlreadyBoard + '份' },
{ status: '黑名单', value: companyInfo.value?.Blacklist + '份' } { status: '人才库', value: companyInfo.value?.TalentPool + '份' },
] { status: '人才储备', value: companyInfo.value?.Blacklist + '份' }
]
})
export const positionList = [ export const positionList = [
{ name: '全部职位', type: '' }, { name: '全部职位', type: '' },
......
...@@ -345,7 +345,6 @@ const handleChange = async (type: string, FNUMBER: string) => { ...@@ -345,7 +345,6 @@ const handleChange = async (type: string, FNUMBER: string) => {
state.form.FIndustry = FNUMBER state.form.FIndustry = FNUMBER
break break
case 'Member': case 'Member':
if (!state.isAdd) return
state.form.FScaleS = FNUMBER state.form.FScaleS = FNUMBER
break break
case 'Financing': case 'Financing':
......
...@@ -230,7 +230,6 @@ const state = reactive({ ...@@ -230,7 +230,6 @@ const state = reactive({
FJobKeywords: [], //职位关键词 FJobKeywords: [], //职位关键词
FRecruitsNumber: null, //招聘人数 FRecruitsNumber: null, //招聘人数
FMonthlySalary: '', //月薪数 FMonthlySalary: '', //月薪数
FPublisher: '', //发布人(无需填写)
addr: [] addr: []
} as any, } as any,
rules: { rules: {
...@@ -301,7 +300,7 @@ const showInput = () => { ...@@ -301,7 +300,7 @@ const showInput = () => {
} }
const handleInputConfirm = () => { const handleInputConfirm = () => {
if (state.inputValue) { if (state.inputValue.trim()) {
state.form.FJobKeywords.push(state.inputValue) state.form.FJobKeywords.push(state.inputValue)
} }
state.inputVisible = false state.inputVisible = false
...@@ -327,7 +326,8 @@ const handleResult = () => { ...@@ -327,7 +326,8 @@ const handleResult = () => {
'FWorkPlace', 'FWorkPlace',
'FJobKeywords', 'FJobKeywords',
'FRecruitsNumber', 'FRecruitsNumber',
'FMonthlySalary' 'FMonthlySalary',
'FPublisher'
], ],
Model: { Model: {
FID: 0, FID: 0,
...@@ -347,8 +347,7 @@ const handleResult = () => { ...@@ -347,8 +347,7 @@ const handleResult = () => {
FWorkPlace: '', FWorkPlace: '',
FJobKeywords: '', FJobKeywords: '',
FRecruitsNumber: 0, FRecruitsNumber: 0,
FMonthlySalary: { FNumber: '' }, FMonthlySalary: { FNumber: '' }
FPublisher: ''
} }
} }
} }
...@@ -431,7 +430,6 @@ const initCompanyPositionDetail = async (FID: string) => { ...@@ -431,7 +430,6 @@ const initCompanyPositionDetail = async (FID: string) => {
FJobKeywords: FJOBKEYWORDS, //职位关键词 FJobKeywords: FJOBKEYWORDS, //职位关键词
FRecruitsNumber: FRECRUITSNUMBER, //招聘人数 FRecruitsNumber: FRECRUITSNUMBER, //招聘人数
FMonthlySalary: FMONTHLYSALARY, //月薪数 FMonthlySalary: FMONTHLYSALARY, //月薪数
FPublisher: '', //发布人(无需填写)
addr: addr.slice(0, 3) addr: addr.slice(0, 3)
} }
salaryChange(FMINIMUMWAGE) salaryChange(FMINIMUMWAGE)
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
@mouseleave="mouseleave($event, 'user', 0)" @mouseleave="mouseleave($event, 'user', 0)"
> >
<div class="flx-justify-between"> <div class="flx-justify-between">
<div class="user-name">{{ state.resumeData?.Jbdata?.FName }}</div> <div class="user-name">{{ state.resumeData?.Jbdata?.FName || '姓名' }}</div>
<div <div
id="edit-user0" id="edit-user0"
class="flx-align-center" class="flx-align-center"
...@@ -45,9 +45,11 @@ ...@@ -45,9 +45,11 @@
<el-col class="user-label flx-align-center" :span="8"> <el-col class="user-label flx-align-center" :span="8">
<img src="@/assets/img/icon-resume8.png" width="16" /> <img src="@/assets/img/icon-resume8.png" width="16" />
<span>{{ <span>{{
state.resumeData?.Jbdata?.FGoWorkCount < 10 state.resumeData?.Jbdata?.FGoWorkCount
? `工作${state.resumeData?.Jbdata?.FGoWorkCount}年` ? state.resumeData?.Jbdata?.FGoWorkCount < 10
: '10年以上经验' ? `工作${state.resumeData?.Jbdata?.FGoWorkCount}年`
: '10年以上经验'
: ''
}}</span> }}</span>
</el-col> </el-col>
<el-col class="user-label flx-align-center" :span="8"> <el-col class="user-label flx-align-center" :span="8">
...@@ -60,15 +62,17 @@ ...@@ -60,15 +62,17 @@
</el-col> </el-col>
<el-col class="user-label flx-align-center" :span="8"> <el-col class="user-label flx-align-center" :span="8">
<img src="@/assets/img/icon-resume2.png" width="16" /> <img src="@/assets/img/icon-resume2.png" width="16" />
<span>{{ state.resumeData?.Jbdata?.FUserPhone }}</span> <span>{{ maskedUserPhone }}</span>
</el-col> </el-col>
<el-col class="user-label flx-align-center" :span="8"> <el-col class="user-label flx-align-center" :span="8">
<img src="@/assets/img/icon-resume3.png" width="16" /> <img src="@/assets/img/icon-resume3.png" width="16" />
<span>{{ state.resumeData?.Jbdata?.FWechat }}</span> <span>{{ maskedWechat }}</span>
</el-col> </el-col>
<el-col class="user-label flx-align-center" :span="8"> <el-col class="user-label flx-align-center" :span="8">
<img src="@/assets/img/icon-resume4.png" width="16" /> <img src="@/assets/img/icon-resume4.png" width="16" />
<span>{{ state.resumeData?.Jbdata?.FEmail }}</span> <span>{{
state.resumeData?.Jbdata?.FEmail?.replace(/(\d{2})\d+(\d{3}@)/, '$1****$2')
}}</span>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
...@@ -97,7 +101,11 @@ ...@@ -97,7 +101,11 @@
@mouseover="mouseover($event, 'advantage', 0)" @mouseover="mouseover($event, 'advantage', 0)"
@mouseleave="mouseleave($event, 'advantage', 0)" @mouseleave="mouseleave($event, 'advantage', 0)"
> >
<pre style="flex: 1">{{ state.resumeData?.Jbdata?.FPersonalStrengths }}</pre> <pre style="flex: 1">{{
state.resumeData?.Jbdata?.FPersonalStrengths.trim()
? state.resumeData?.Jbdata?.FPersonalStrengths
: '填写您的个人优势'
}}</pre>
<div style="width: 60px"> <div style="width: 60px">
<div <div
id="edit-advantage0" id="edit-advantage0"
...@@ -213,11 +221,7 @@ ...@@ -213,11 +221,7 @@
<span>{{ item.FPosition }}</span> <span>{{ item.FPosition }}</span>
</div> </div>
<div> <div>
<span :id="'work-date' + index" style="color: #666666" <span :id="'work-date' + index" style="color: #666666">{{ experience }}</span>
>{{ dayjs(item.FStartDate).format('YYYY.MM') }}-{{
dayjs(item.FEndDate).format('YYYY.MM')
}}</span
>
<div <div
:id="'edit-work' + index" :id="'edit-work' + index"
class="flx-align-center" class="flx-align-center"
...@@ -339,7 +343,9 @@ ...@@ -339,7 +343,9 @@
> >
<div class="flx-justify-between" style="align-items: start"> <div class="flx-justify-between" style="align-items: start">
<div style="display: flex"> <div style="display: flex">
<img src="@/assets/img/icon-resume9.png" width="60" height="60" /> <div class="round-img flx-center">
<img src="@/assets/img/icon-resume5.png" width="34" height="34" />
</div>
<div class="education"> <div class="education">
<div> <div>
<span style="font-size: 18px; margin-right: 16px">{{ <span style="font-size: 18px; margin-right: 16px">{{
...@@ -576,9 +582,39 @@ const educationRef = ref() ...@@ -576,9 +582,39 @@ const educationRef = ref()
const uploadImgRef = ref() const uploadImgRef = ref()
const loading = ref(true) const loading = ref(true)
const experience = computed(() => {
const { FGoWorkCount } = state.resumeData?.Jbdata || {}
if (FGoWorkCount) {
if (FGoWorkCount < 10) {
return `工作${FGoWorkCount}年`
} else {
return '10年以上经验'
}
} else {
return ''
}
})
const maskedWechat = computed(() => {
const { FWechat } = state.resumeData?.Jbdata || {}
if (FWechat && FWechat.trim()) {
return FWechat.substring(0, 3) + '****'
} else {
return ''
}
})
const maskedUserPhone = computed(() => {
const { FUserPhone } = state.resumeData?.Jbdata || {}
if (FUserPhone && FUserPhone.trim()) {
return FUserPhone.substring(0, 3) + '****' + FUserPhone.substring(7)
} else {
return ''
}
})
const selectDepartRemain = (departRemain: string) => { const selectDepartRemain = (departRemain: string) => {
let row = jobStatus.find((item: any) => item.value === departRemain) let row = jobStatus.find((item: any) => item.value === departRemain)
return row ? row.label : jobStatus[3] return row ? row.label : jobStatus[3].label
} }
const resumeChange = (row: any) => { const resumeChange = (row: any) => {
...@@ -631,13 +667,20 @@ const openFile = (row: any) => { ...@@ -631,13 +667,20 @@ const openFile = (row: any) => {
// 修改个人信息 // 修改个人信息
const userInfoClick = () => { const userInfoClick = () => {
userInfoRef.value.form.Model = { ...userInfoRef.value.form.Model, ...state.resumeData?.Jbdata } const { FWechat, FUserPhone, FEmail } = state.resumeData.Jbdata
userInfoRef.value.form.Model = {
...userInfoRef.value.form.Model,
...state.resumeData?.Jbdata,
FEmail: FEmail.replace(/(\d{2})\d+(\d{3}@)/, '$1****$2'),
FUserPhone: FUserPhone.substring(0, 3) + '****' + FUserPhone.substring(7),
FWechat: FWechat.substring(0, 3) + '****'
}
state.userInfoShow = true state.userInfoShow = true
} }
// 设置点击显示唯一 // 设置点击显示唯一
const setShow = (data: any[], showProp: string, showValue: boolean) => { const setShow = (data: any[], showProp: string, showValue: boolean) => {
data.forEach((item: any) => (item[showProp] = showValue)) data?.forEach((item: any) => (item[showProp] = showValue))
} }
const addvantageClick = () => { const addvantageClick = () => {
...@@ -735,7 +778,6 @@ const init = async () => { ...@@ -735,7 +778,6 @@ const init = async () => {
loading.value = true loading.value = true
const res: any = await getResume() const res: any = await getResume()
if (res.code === 200) { if (res.code === 200) {
// console.log(res.data)
state.resumeData = res.data state.resumeData = res.data
loading.value = false loading.value = false
} }
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
/> />
<div class="flx-direction-column"> <div class="flx-direction-column">
<span class="company-title">{{ userInfoStore.companyInfo?.FNAME }}</span> <span class="company-title">{{ userInfoStore.companyInfo?.FNAME }}</span>
<div> <div style="display: flex; flex-wrap: wrap">
<span class="info-label">{{ userInfoStore.companyInfo?.FINDUSTRY }}</span> <span class="info-label">{{ userInfoStore.companyInfo?.FINDUSTRY }}</span>
<span class="info-label">{{ userInfoStore.companyInfo?.FFINANCING }}</span> <span class="info-label">{{ userInfoStore.companyInfo?.FFINANCING }}</span>
<span class="info-label">{{ userInfoStore.companyInfo?.FSCALE }}</span> <span class="info-label">{{ userInfoStore.companyInfo?.FSCALE }}</span>
......
<template> <template>
<div class="main-container"> <div class="main-container">
<!-- <search style="margin: 25px 0" @search-change="searchChange" /> --> <el-carousel height="560px" style="width: 100%">
<el-carousel-item v-for="item in posterList" :key="item">
<img :src="baseURL + '/' + item.FPOSTERPICTURE" style="width: 100%; height: 100%" />
</el-carousel-item>
</el-carousel>
<autocomplete <autocomplete
style="margin: 25px 0" style="margin: 25px 0"
:list="querySearch" :list="querySearch"
placeholder="搜索关键字" placeholder="搜索职位、公司"
@search-change="searchChange" @search-change="searchChange"
@query-search-async="querySearchAsync" @query-search-async="querySearchAsync"
/> />
...@@ -40,7 +44,9 @@ ...@@ -40,7 +44,9 @@
<router-link <router-link
:to="{ :to="{
path: '/recruitmentManagement/personal', path: '/recruitmentManagement/personal',
query: { searchValue: col.FDATAVALUE } query: {
searchValue: col.FDATAVALUE.replace(/[\((][^\))]+[\))]/g, '')
}
}" }"
style="text-decoration: none" style="text-decoration: none"
> >
...@@ -64,7 +70,7 @@ ...@@ -64,7 +70,7 @@
/> />
</div> </div>
</div> </div>
<!-- 热招职位 -->
<div class="hot-position"> <div class="hot-position">
<div class="n-title">热招职位</div> <div class="n-title">热招职位</div>
<el-tabs v-model="activeName" class="hot-position-tabs" stretch @tab-click="handleClick"> <el-tabs v-model="activeName" class="hot-position-tabs" stretch @tab-click="handleClick">
...@@ -75,38 +81,47 @@ ...@@ -75,38 +81,47 @@
:name="item.name" :name="item.name"
class="hot-position-tab-pane" class="hot-position-tab-pane"
> >
<div class="position-list"> <div v-if="hotPositionList.length">
<div v-for="col in 6" :key="col" class="position-item"> <div class="position-list">
<div class="flx-justify-between" style="margin-bottom: 20px"> <div v-for="col in hotPositionList" :key="col.jobfid" class="position-item">
<div class="position-title nowrap-ellipsis"> <div @click="toPositionDetail(col.jobfid)">
销售经理销售经理销售经理销售经理销售经理销售经理 <div class="flx-justify-between" style="margin-bottom: 20px">
<div class="position-title nowrap-ellipsis">
{{ col.jobname }}
</div>
<div>
<span class="salary">{{ col.fminimumwage }}-{{ col.fmaximumsalary }}</span>
<span class="monthly-pay">元/月</span>
</div>
</div>
<div class="position-label">
<span>{{ col.feducationalbackground }}</span>
<el-divider direction="vertical" />
<span>{{ col.fexperience }}</span>
<el-divider direction="vertical" />
<span>招聘{{ col.FRECRUITSNUMBER }}人</span>
</div>
</div> </div>
<el-divider style="margin: 14px 0" />
<div> <div>
<span class="salary">6000-8000</span> <div class="company">{{ col.firmname }}</div>
<span class="monthly-pay">元/月</span> <div class="company-label">
<span>{{ col.ffinancings }}</span>
<el-divider direction="vertical" />
<span>{{ col.fscales }}</span>
<el-divider direction="vertical" />
<span>{{ col.findustry }}</span>
</div>
</div> </div>
</div> </div>
<div class="position-label"> </div>
<span>大专</span> <div class="flx-center" style="text-align: center">
<el-divider direction="vertical" /> <span class="n-more" @click="seeMore">查看更多</span>
<span>1-3年</span>
<el-divider direction="vertical" />
<span>招聘2人</span>
</div>
<el-divider style="margin: 14px 0" />
<div class="company">深圳市世杰创益酒店酒店管理限公司</div>
<div class="company-label">
<span>大专</span>
<el-divider direction="vertical" />
<span>1-3年</span>
<el-divider direction="vertical" />
<span>招聘2人</span>
</div>
</div> </div>
</div> </div>
<el-empty v-else description="暂无职位" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<span class="n-more">查看更多</span>
</div> </div>
<!-- 热门企业 --> <!-- 热门企业 -->
...@@ -163,8 +178,13 @@ ...@@ -163,8 +178,13 @@
<script setup lang="ts"> <script setup lang="ts">
import { baseURL } from '@/services' import { baseURL } from '@/services'
import { getPosition, getUserPostionList } from '@/services/api/recruitmentManagement' import {
getPosition,
getUserPostionList,
getHotPosition
} from '@/services/api/recruitmentManagement'
import { getStreet } from '@/services/api/streetOfficeSpecialTopic' import { getStreet } from '@/services/api/streetOfficeSpecialTopic'
import { getPoster } from '@/services/api/common'
import { useUserInfoStore } from '@/stores/modules/userInfo' import { useUserInfoStore } from '@/stores/modules/userInfo'
import autocomplete from '@/components/autocomplete.vue' import autocomplete from '@/components/autocomplete.vue'
...@@ -174,19 +194,21 @@ const menuList = ref([] as any) ...@@ -174,19 +194,21 @@ const menuList = ref([] as any)
const FDATAVALUE = ref() const FDATAVALUE = ref()
const streetList = ref() const streetList = ref()
const posterList: any = ref([])
const hotPositionList: any = ref([])
const querySearch = ref([]) const querySearch = ref([])
const tabsList = [ const tabsList = [
{ label: '市场', name: 0 }, { label: '市场', name: 'LevelJob_18' },
{ label: '运营', name: 1 }, { label: '运营', name: 'LevelJob_04' },
{ label: '销售', name: 2 }, { label: '销售', name: 'LevelJob_05' },
{ label: '技术', name: 3 }, { label: '技术', name: 'LevelJob_01' },
{ label: '服务业', name: 4 }, { label: '服务业', name: 'LevelJob_11' },
{ label: '设计', name: 5 }, { label: '设计', name: 'LevelJob_15' },
{ label: '管理', name: 6 }, { label: '管理', name: 'LevelJob_09' },
{ label: '人力/财务/行政', name: 7 } { label: '人力/财务/行政', name: 'LevelJob_07' }
] ]
const activeName = ref(0) const activeName = ref('LevelJob_18')
watch( watch(
() => userInfoStore, () => userInfoStore,
...@@ -201,8 +223,9 @@ watch( ...@@ -201,8 +223,9 @@ watch(
{ immediate: true, deep: true } { immediate: true, deep: true }
) )
const handleClick = (tab: string) => { const handleClick = (tab: any, e: any) => {
router.push({ path: '/recruitmentManagement/enterprise' }) activeName.value = tab.props.name
initHotPosition()
} }
const querySearchAsync = async (searchVal: string) => { const querySearchAsync = async (searchVal: string) => {
...@@ -220,6 +243,10 @@ const searchChange = (searchValue: string) => { ...@@ -220,6 +243,10 @@ const searchChange = (searchValue: string) => {
router.push({ path: '/recruitmentManagement/personal', query: { searchValue } }) router.push({ path: '/recruitmentManagement/personal', query: { searchValue } })
} }
const seeMore = () => {
router.push({ path: '/recruitmentManagement/personal' })
}
const subMenuList = computed(() => { const subMenuList = computed(() => {
if (!FDATAVALUE.value) return [] if (!FDATAVALUE.value) return []
const list = JSON.parse(JSON.stringify(menuList.value)) || [] const list = JSON.parse(JSON.stringify(menuList.value)) || []
...@@ -247,17 +274,33 @@ const mouseout = (row?: any) => { ...@@ -247,17 +274,33 @@ const mouseout = (row?: any) => {
if (!row) return if (!row) return
} }
const toPositionDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/positionDetail', query: { FID } })
}
const initHotPosition = async () => {
const res: any = await getHotPosition({ FNUMBER: activeName.value })
if (res.code === 200) {
hotPositionList.value = res.data || []
}
}
const init = async () => { const init = async () => {
const res: any = await getPosition() const res: any = await getPosition()
if (res.code === 200) { if (res.code === 200) {
// menuList.value = res.data.LevelJobS.filter((item: any, i: number) => i < 10) // menuList.value = res.data.LevelJobS.filter((item: any, i: number) => i < 10)
menuList.value = res.data.LevelJobS menuList.value = res.data?.LevelJobS || []
} }
const street: any = await getStreet() const street: any = await getStreet()
if (street.code === 200) { if (street.code === 200) {
streetList.value = street.data.sort((a: any, b: any) => a.FSERIALNUMBER - b.FSERIALNUMBER) streetList.value = street.data.sort((a: any, b: any) => a.FSERIALNUMBER - b.FSERIALNUMBER)
} }
const poster: any = await getPoster({ Type: 'O' })
if (street.code === 200) {
posterList.value = poster.data || []
}
await initHotPosition()
} }
onMounted(() => { onMounted(() => {
......
...@@ -193,15 +193,11 @@ const selectChange = (e: any, index: number) => { ...@@ -193,15 +193,11 @@ const selectChange = (e: any, index: number) => {
} }
const clearFilter = () => { const clearFilter = () => {
queryList.value.Filter = { queryList.value.Filter.FEXPERIENCE = ''
FNAME: queryList.value.Filter.FNAME, //标题 queryList.value.Filter.SalaryRange = ''
FSUBSTREET: '', //街道 queryList.value.Filter.FEDUCATIONALBACKGROUND = ''
FEXPERIENCE: '', //经验 queryList.value.Filter.FFINANCINGS = ''
SalaryRange: '', //薪资范围 queryList.value.Filter.FSCALES = ''
FEDUCATIONALBACKGROUND: '', //学历
FSCALES: '', //规模
FFINANCINGS: '' //融资情况
}
initUserPostionList() initUserPostionList()
} }
...@@ -220,7 +216,13 @@ const toPositionDetail = (FID: number) => { ...@@ -220,7 +216,13 @@ const toPositionDetail = (FID: number) => {
const initUserPostionList = async () => { const initUserPostionList = async () => {
filterLoading.value = true filterLoading.value = true
const res: any = await getUserPostionList(queryList.value) let params = JSON.parse(JSON.stringify(queryList.value))
for (const key in params.Filter) {
params.Filter[key] = params.Filter[key].trim()
}
console.log(params.Filter)
const res: any = await getUserPostionList(params)
if (res.code === 200) { if (res.code === 200) {
loading.value = false loading.value = false
filterLoading.value = false filterLoading.value = false
...@@ -239,9 +241,15 @@ const init = async () => { ...@@ -239,9 +241,15 @@ const init = async () => {
}) })
streetList.value.unshift({ streetList.value.unshift({
FNAME: '全部', FNAME: '全部',
FID: ' ', FID: '',
active: true active: true
}) })
if (queryList.value.Filter.FSUBSTREET) {
streetList.value.map((item: any) => {
if (item.FID == queryList.value.Filter.FSUBSTREET) item.active = true
else item.active = false
})
}
} }
const res: any = await getInformation({ const res: any = await getInformation({
AuxiliaryS: ['Experience', 'SalaryRange', 'Degree2', 'Member', 'Financing'] AuxiliaryS: ['Experience', 'SalaryRange', 'Degree2', 'Member', 'Financing']
...@@ -264,8 +272,10 @@ const init = async () => { ...@@ -264,8 +272,10 @@ const init = async () => {
} }
onMounted(() => { onMounted(() => {
const { searchValue } = route.query const { searchValue, street } = route.query
autocompleteRef.value.searchValue = searchValue autocompleteRef.value.searchValue = searchValue
queryList.value.Filter.FNAME = searchValue || ''
queryList.value.Filter.FSUBSTREET = Number(street) || ''
init() init()
}) })
</script> </script>
......
...@@ -24,11 +24,38 @@ ...@@ -24,11 +24,38 @@
</div> </div>
<div class="flx-align-center" style="margin-top: 24px"> <div class="flx-align-center" style="margin-top: 24px">
<span <span
v-for="(item, index) in detailData?.FJOBKEYWORDS" v-for="(item, index) in detailData?.FCORPORATEWELFARE.filter(
(e: any, i: number) => i < 5
)"
:key="index" :key="index"
class="label" class="label"
>{{ item }}</span >{{ item }}</span
> >
<el-popover
placement="bottom-start"
title=""
:show-arrow="false"
:width="500"
:popper-style="{ background: '#022756', border: '1px solid #ffffff' }"
>
<template #default>
<div class="flx-align-center" style="flex-wrap: wrap">
<span
v-for="(item, index) in detailData?.FCORPORATEWELFARE"
:key="index"
class="label"
style="color: #ffffff; margin-bottom: 8px"
>{{ item }}</span
>
</div>
</template>
<template #reference>
<span class="label popover-label" style="cursor: pointer">
<el-icon><i-ep-MoreFilled /></el-icon>
</span>
</template>
</el-popover>
</div> </div>
</div> </div>
<div class="flx-column-start-between"> <div class="flx-column-start-between">
...@@ -41,7 +68,7 @@ ...@@ -41,7 +68,7 @@
<div class="position-describe"> <div class="position-describe">
<span class="desc-title">职位描述</span> <span class="desc-title">职位描述</span>
<div class="keyWords"> <div class="keyWords">
<span v-for="(item, index) in detailData?.FCORPORATEWELFARE || []" :key="index">{{ <span v-for="(item, index) in detailData?.FJOBKEYWORDS || []" :key="index">{{
item item
}}</span> }}</span>
</div> </div>
...@@ -53,16 +80,7 @@ ...@@ -53,16 +80,7 @@
<span>{{ detailData?.FPUBLISHERS }}</span> <span>{{ detailData?.FPUBLISHERS }}</span>
<div class="flx-align-center" style="font-size: 14px"> <div class="flx-align-center" style="font-size: 14px">
{{ detailData?.FirmName }} {{ detailData?.FirmName }}
<span <span class="round" />
style="
display: inline-block;
width: 4px;
height: 4px;
background: #cccccc;
border-radius: 50%;
margin: 0 4px;
"
/>
{{ detailData?.FJOBTITLES }} {{ detailData?.FJOBTITLES }}
</div> </div>
</div> </div>
...@@ -90,9 +108,13 @@ ...@@ -90,9 +108,13 @@
:label="item.label" :label="item.label"
:span="item.span" :span="item.span"
:width="item.width" :width="item.width"
>{{ ><span v-show="item.label">
detailData?.gsData[item.prop] ? detailData?.gsData[item.prop] : '-' {{
}}</el-descriptions-item detailData?.gsData[item.prop] && detailData?.gsData[item.prop] !== ' '
? detailData?.gsData[item.prop]
: '-'
}}
</span></el-descriptions-item
> >
</el-descriptions> </el-descriptions>
<div class="business-expand" @click="businessShow = !businessShow"> <div class="business-expand" @click="businessShow = !businessShow">
......
...@@ -172,7 +172,12 @@ ...@@ -172,7 +172,12 @@
[id^='show-education'] { [id^='show-education'] {
cursor: pointer; cursor: pointer;
padding: 14px 32px; padding: 14px 32px;
.round-img {
width: 60px;
height: 60px;
border-radius: 50%;
background: #f8f8f8;
}
&:hover { &:hover {
padding: 14px 32px; padding: 14px 32px;
background: #f8f8f8; background: #f8f8f8;
......
...@@ -127,5 +127,6 @@ ...@@ -127,5 +127,6 @@
font-weight: 400; font-weight: 400;
color: #177cfa; color: #177cfa;
margin-right: 8px; margin-right: 8px;
margin-bottom: 8px;
} }
} }
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
.personal-contnet { .personal-contnet {
width: 100%; width: 100%;
min-height: 300px;
.personal-ct-item { .personal-ct-item {
cursor: pointer; cursor: pointer;
background: #ffffff; background: #ffffff;
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
padding: 24px 36px; padding: 24px 36px;
.keyWords { .keyWords {
width: 90%;
margin: 24px 0 20px; margin: 24px 0 20px;
span { span {
display: inline-block; display: inline-block;
...@@ -66,6 +67,7 @@ ...@@ -66,6 +67,7 @@
margin-right: 12px; margin-right: 12px;
font-size: 14px; font-size: 14px;
color: #177cfa; color: #177cfa;
margin-bottom: 8px;
} }
} }
pre { pre {
...@@ -88,6 +90,7 @@ ...@@ -88,6 +90,7 @@
border-radius: 12px; border-radius: 12px;
box-sizing: border-box; box-sizing: border-box;
padding: 24px 36px; padding: 24px 36px;
.text-container { .text-container {
position: relative; position: relative;
max-height: calc(3 * 1.3em); /* 3行文本的高度,假设行高为1.2em */ max-height: calc(3 * 1.3em); /* 3行文本的高度,假设行高为1.2em */
...@@ -150,19 +153,6 @@ ...@@ -150,19 +153,6 @@
} }
} }
} }
.label {
display: block;
box-sizing: border-box;
height: 26px;
background: #1c406e;
font-size: 12px;
border-radius: 4px;
padding: 0 10px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 8px;
}
.desc-title { .desc-title {
font-size: 18px; font-size: 18px;
...@@ -173,4 +163,35 @@ ...@@ -173,4 +163,35 @@
pre { pre {
white-space: pre-wrap; white-space: pre-wrap;
} }
.round {
display: inline-block;
width: 4px;
height: 4px;
background: #cccccc;
border-radius: 50%;
margin: 0 4px;
}
}
.popover-label {
padding: 1px 10px;
box-sizing: border-box;
}
.popover-label:hover {
border: 1px solid #177cfa !important;
}
.label {
display: block;
box-sizing: border-box;
height: 26px;
background: #1c406e;
font-size: 12px;
border-radius: 4px;
padding: 0 10px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 8px;
} }
...@@ -172,6 +172,7 @@ ...@@ -172,6 +172,7 @@
margin: -5px; margin: -5px;
margin: 24px 0; margin: 24px 0;
.hot-position-item { .hot-position-item {
width: calc(33.333% - 10px);
flex: 0 0 calc(33.333% - 10px); flex: 0 0 calc(33.333% - 10px);
margin: 5px; margin: 5px;
box-sizing: border-box; box-sizing: border-box;
...@@ -187,6 +188,7 @@ ...@@ -187,6 +188,7 @@
font-weight: 400; font-weight: 400;
color: #222222; color: #222222;
line-height: 14px; line-height: 14px;
text-align: left;
} }
.item-rg { .item-rg {
font-size: 18px; font-size: 18px;
...@@ -196,7 +198,11 @@ ...@@ -196,7 +198,11 @@
.hot-position-item-ft { .hot-position-item-ft {
margin-top: 16px; margin-top: 16px;
display: flex; display: flex;
span:first-child {
width: 40%;
}
span { span {
display: inline-block;
padding: 6px 12px; padding: 6px 12px;
background: #f8f8f8; background: #f8f8f8;
border-radius: 4px; border-radius: 4px;
......
...@@ -29,9 +29,9 @@ ...@@ -29,9 +29,9 @@
<div class="street-card-content flx-center"> <div class="street-card-content flx-center">
<div class="content-top">{{ streetOverview }}</div> <div class="content-top">{{ streetOverview }}</div>
<p>{{ streetDetail?.FSTREETOVERVIEW }}</p> <p>{{ streetDetail?.FSTREETOVERVIEW }}</p>
<div class="content-footer"> <!-- <div class="content-footer">
查看更多<el-icon><i-ep-DArrowRight /></el-icon> 查看更多<el-icon><i-ep-DArrowRight /></el-icon>
</div> </div> -->
</div> </div>
</div> </div>
...@@ -56,49 +56,67 @@ ...@@ -56,49 +56,67 @@
<div class="hot-position"> <div class="hot-position">
<div class="n-title">热招职位</div> <div class="n-title">热招职位</div>
<div class="hot-position-list"> <div class="hot-position-list">
<div v-for="item in 6" :key="item" class="hot-position-item"> <div
v-for="item in streetPositionList?.Zwdata || []"
:key="item"
class="hot-position-item"
@click="toPositionDetail(item.FID)"
>
<div class="flx-justify-between"> <div class="flx-justify-between">
<div class="item-lf nowrap-ellipsis" title="软件测试 (学信网可查,深圳 福田区 新洲)"> <div class="item-lf nowrap-ellipsis" :title="item.JobName">
软件测试 (学信网可查,深圳 福田区 新洲) {{ item.JobName }}
</div> </div>
<div class="item-rg">11-15K</div> <div class="item-rg">{{ item.FMINIMUMWAGE }}-{{ item.FMAXIMUMSALARY }}</div>
</div> </div>
<div class="hot-position-item-ft"> <div class="hot-position-item-ft">
<span>深圳 福田区 新洲</span> <span class="nowrap-ellipsis">{{
<span>经验不限 </span> `${item.FWORKPLACE.split('/')[0]} ${item.FWORKPLACE.split('/')[1]} ${
<span>学历不限</span> item.FWORKPLACE.split('/')[2]
}`
}}</span>
<span>{{ item.FEXPERIENCE }}</span>
<span>{{ item.FEDUCATIONALBACKGROUND }}</span>
</div> </div>
</div> </div>
</div> </div>
<span class="n-more">查看更多</span> <span class="n-more" @click="toPersonal">查看更多</span>
</div> </div>
<div class="hot-position"> <div class="hot-position">
<div class="n-title">辖区企业</div> <div class="n-title">辖区企业</div>
<div class="hot-position-list"> <div class="hot-position-list">
<div v-for="item in 6" :key="item" class="hot-position-item enterprise"> <div
<div class="enterprise-tp"> v-for="item in streetPositionList?.Qydata || []"
:key="item"
class="hot-position-item enterprise"
>
<div class="enterprise-tp" @click="toPositionDetail(item.JobName)">
<div class="flx-justify-between"> <div class="flx-justify-between">
<div <div class="item-lf nowrap-ellipsis" :title="item.JobName">
class="item-lf nowrap-ellipsis" {{ item.JobName }}
title="软件测试 (学信网可查,深圳 福田区 新洲)"
>
软件测试 (学信网可查,深圳 福田区 新洲)
</div> </div>
<div class="item-rg">11-15K</div> <div class="item-rg">{{ item.FMINIMUMWAGE }}-{{ item.FMAXIMUMSALARY }}</div>
</div> </div>
<div class="hot-position-item-ft"> <div class="hot-position-item-ft">
<span>深圳 福田区 新洲</span> <span class="nowrap-ellipsis">{{
<span>经验不限 </span> `${item.FWORKPLACE.split('/')[0]} ${item.FWORKPLACE.split('/')[1]} ${
<span>学历不限</span> item.FWORKPLACE.split('/')[2]
}`
}}</span>
<span>{{ item.FEXPERIENCE }}</span>
<span>{{ item.FEDUCATIONALBACKGROUND }}</span>
</div> </div>
</div> </div>
<div class="enterprise-bt flx-justify-between"> <div class="enterprise-bt flx-justify-between">
<div class="flx-align-center"> <div class="flx-align-center">
<img src="@/assets/img/icon-gonggao.png" width="24px" height="24px" /> <img src="@/assets/img/icon-gonggao.png" width="24px" height="24px" />
<span style="margin-left: 8px">好乐租</span> <span style="margin-left: 8px">{{ item.FirmName }}</span>
</div>
<div>
<span>{{ item.FINDUSTRY }}</span>
<el-divider direction="vertical" />
<span>{{ item.FFINANCINGS }}</span>
</div> </div>
<div><span>软件开发</span> <span class="line" /> <span>未融资</span></div>
</div> </div>
</div> </div>
</div> </div>
...@@ -110,10 +128,12 @@ ...@@ -110,10 +128,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { baseURL } from '@/services' import { baseURL } from '@/services'
import { getStreet } from '@/services/api/streetOfficeSpecialTopic' import { getStreet, getStreetPosition } from '@/services/api/streetOfficeSpecialTopic'
const route = useRoute() const route = useRoute()
const router = useRouter()
const streetList: any = ref([]) const streetList: any = ref([])
const streetPositionList: any = ref([])
const streetData = ref([ const streetData = ref([
{ {
name: '街道概况', name: '街道概况',
...@@ -141,6 +161,7 @@ const streetOverview = ref() ...@@ -141,6 +161,7 @@ const streetOverview = ref()
const streetDetail: any = ref() const streetDetail: any = ref()
const overviewDetail: any = ref() const overviewDetail: any = ref()
const loading = ref(true)
watch( watch(
() => streetActive.value, () => streetActive.value,
...@@ -155,8 +176,17 @@ watch( ...@@ -155,8 +176,17 @@ watch(
} }
) )
const toPositionDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/positionDetail', query: { FID } })
}
const toPersonal = () => {
router.push({ path: '/recruitmentManagement/personal', query: { street: streetActive.value } })
}
const change = (FID: string) => { const change = (FID: string) => {
streetActive.value = FID streetActive.value = FID
initStreetPosition()
} }
const streeChange = (index: number) => { const streeChange = (index: number) => {
...@@ -168,14 +198,26 @@ const streeChange = (index: number) => { ...@@ -168,14 +198,26 @@ const streeChange = (index: number) => {
}) })
} }
const initStreetPosition = async () => {
const res: any = await getStreetPosition({ FID: streetActive.value })
if (res.code === 200) {
streetPositionList.value = res.data || []
}
}
const init = async () => { const init = async () => {
loading.value = true
const res: any = await getStreet() const res: any = await getStreet()
if (res.code === 200) { if (res.code === 200) {
streetList.value = res.data streetList.value = res.data
.map((item: any) => ({ ...item, FNAME: item.FNAME + '专题' })) .map((item: any) => ({ ...item, FNAME: item.FNAME + '专题' }))
.sort((a: any, b: any) => a.FSERIALNUMBER - b.FSERIALNUMBER) .sort((a: any, b: any) => a.FSERIALNUMBER - b.FSERIALNUMBER)
const { FID } = route.query if (!streetActive.value) {
streetActive.value = FID || streetList.value[0]?.FID || null const { FID } = route.query
streetActive.value = FID || streetList.value[0]?.FID || null
}
initStreetPosition()
loading.value = false
} }
} }
......
.skill-container {
width: 100%;
.container {
width: 1316px;
text-align: center;
img {
width: 100%;
margin-top: 24px;
border-radius: 12px;
}
.train-list {
display: flex;
margin: 24px 0;
border: 1px solid #177cfa;
border-radius: 8px;
.train-item {
flex: 0 0 20%;
height: 58px;
line-height: 58px;
border-right: 1px solid #177cfa;
font-size: 24px;
font-weight: 500;
color: #177cfa;
&:nth-child(5) {
border-right: 0;
}
}
}
}
}
<template> <template>
<div>人力实训基地</div> <div v-loading="loading" class="skill-container flx-center">
<div class="container">
<img :src="baseURL + '/' + commonData?.HbData?.[0].FPOSTERPICTURE" height="560" />
<div style="margin: 24px 0 360px">
<contentBlock :list="commonData?.GaQnData" @change="handleChange" />
</div>
</div>
</div>
</template> </template>
<script setup lang="ts"></script> <script setup lang="ts">
import { baseURL } from '@/services'
import { getCommon } from '@/services/api/common'
import contentBlock from '@/components/contentBlock.vue'
<style scoped></style> const router = useRouter()
const loading = ref(true)
const queryList = ref({ pageIndex: 1, pageSize: 10, FormType: 'M' })
const commonData: any = ref()
const handleChange = (row: any) => {
router.push({ path: '/commonDetail', query: { FID: row.FID, FormType: 'M', FTITLE: row.FTITLE } })
}
const init = async () => {
const res: any = await getCommon(queryList.value)
if (res.code === 200) {
commonData.value = res.data
loading.value = false
}
}
init()
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>
...@@ -17,6 +17,8 @@ declare module 'vue' { ...@@ -17,6 +17,8 @@ declare module 'vue' {
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb'] ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem'] ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton'] ElButton: typeof import('element-plus/es')['ElButton']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCascader: typeof import('element-plus/es')['ElCascader'] ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCol: typeof import('element-plus/es')['ElCol'] ElCol: typeof import('element-plus/es')['ElCol']
...@@ -42,6 +44,7 @@ declare module 'vue' { ...@@ -42,6 +44,7 @@ declare module 'vue' {
ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption'] ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination'] ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElRate: typeof import('element-plus/es')['ElRate'] ElRate: typeof import('element-plus/es')['ElRate']
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
......
...@@ -80,16 +80,6 @@ export default defineConfig({ ...@@ -80,16 +80,6 @@ export default defineConfig({
} }
} }
}, },
// build: {
// minify: 'terser',
// terserOptions: {
// compress: {
// //生产环境时移除console.log()
// drop_console: true,
// drop_debugger: true
// }
// }
// },
build: { build: {
outDir: 'dist', outDir: 'dist',
sourcemap: false, sourcemap: false,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论