提交 155e06ea authored 作者: 刘旭's avatar 刘旭

更新代码

上级 8cb40226
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="image/svg+xml" href="/src/assets//img/logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>南山就业帮</title> <title>南山就业帮</title>
<style> <style>
......
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
\ No newline at end of file
<template>
<div class="flx-center" style="margin: 20px 0 30px; color: #222222">
<div class="flx-align-center">
<span style="margin-right: 24px">当前第 {{ pageIndex }}</span>
<span style="margin-right: 24px">总共 {{ totalPages }}</span>
<el-icon
size="22"
:class="pageIndex === 1 ? 'prohibit' : ''"
style="margin-right: 18px; cursor: pointer"
@click="currentChange('minus')"
><i-ep-CaretLeft
/></el-icon>
<el-icon
size="22"
:class="pageIndex === totalPages ? 'prohibit' : ''"
style="margin-right: 18px; cursor: pointer"
@click="currentChange('add')"
><i-ep-CaretRight
/></el-icon>
<span
class="tail-page"
:style="{ cursor: pageIndex === totalPages ? 'no-drop' : '' }"
@click="tailPage"
>尾页</span
>
</div>
</div>
</template>
<script setup lang="ts">
const props = defineProps({
pageIndex: {
type: Number,
default: 1
},
pageSize: {
type: Number,
default: 1
},
total: {
type: Number,
default: 1
}
})
const emits = defineEmits(['current-change', 'tail-page'])
const totalPages = computed(() => Math.ceil(props.total / props.pageSize))
const currentChange = (type: string) => {
if (type === 'minus') {
if (props.pageIndex === 1) return
emits('current-change', props.pageIndex - 1)
} else {
if (props.pageIndex === totalPages.value) return
emits('current-change', props.pageIndex + 1)
}
}
const tailPage = () => {
if (props.pageIndex === totalPages.value) return
emits('current-change', totalPages.value)
}
</script>
<style lang="scss" scoped>
.tail-page {
display: flex;
align-items: center;
justify-content: center;
width: 44px;
height: 31px;
background: #177cfa;
border-radius: 4px;
font-size: 18px;
font-weight: 400;
color: #ffffff;
text-align: center;
cursor: pointer;
}
.prohibit {
color: #909399;
cursor: no-drop !important;
}
</style>
...@@ -13,17 +13,19 @@ ...@@ -13,17 +13,19 @@
</div> </div>
</div> </div>
<div ref="dropdownRef" class="filter-select-dropdown"> <div ref="dropdownRef" class="filter-select-dropdown">
<div <el-scrollbar max-height="320px">
v-for="(item, index) in list" <div
:key="index" v-for="(item, index) in list"
class="dropdown-item flx-justify-between" :key="index"
@click="handleChange(item)" class="dropdown-item flx-justify-between"
> @click="handleChange(item)"
<span :style="{ color: item.FENTRYID === modelValue ? '#177CFA' : '' }">{{ >
item.FDATAVALUE <span :style="{ color: item.FENTRYID === modelValue ? '#177CFA' : '' }">{{
}}</span> item.FDATAVALUE
<el-icon color="#177CFA"><i-ep-Check v-show="item.FENTRYID === modelValue" /></el-icon> }}</span>
</div> <el-icon color="#177CFA"><i-ep-Check v-show="item.FENTRYID === modelValue" /></el-icon>
</div>
</el-scrollbar>
</div> </div>
</div> </div>
</template> </template>
......
<template> <template>
<div style="width: 100%; height: 210px"> <div style="width: 100%; height: 210px">
<!-- <div> <div v-if="flag" id="map-container" style="height: 210px; width: 100%" />
<el-form> <el-empty v-else description="公司地址有误" style="padding: 0" />
<div style="display: flex; justify-content: flex-start">
<el-form-item label="纬度">
<el-input v-model:value="loc.lat"></el-input>
</el-form-item>
<el-form-item label="经度">
<el-input v-model:value="loc.lng"></el-input>
</el-form-item>
</div>
</el-form>
</div> -->
<div id="map-container" style="height: 210px; width: 100%" />
<!-- <div class="common-map-loc"></div> -->
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { jsonp } from '@/utils' import { jsonp } from '@/utils'
const windows: any = window const windows: any = window
let flag = ref(true)
// 组件挂载后,渲染对应组件 // 组件挂载后,渲染对应组件
const initMap = (address: string) => { const initMap = (address: string) => {
...@@ -57,7 +45,7 @@ const initMap = (address: string) => { ...@@ -57,7 +45,7 @@ const initMap = (address: string) => {
} }
] ]
}) })
} } else flag.value = false
}) })
} }
......
...@@ -52,10 +52,22 @@ const routes = [ ...@@ -52,10 +52,22 @@ const routes = [
component: () => import('@/views/recruitmentManagement/positionDetail.vue') component: () => import('@/views/recruitmentManagement/positionDetail.vue')
}, },
{ {
path: '/recruitmentManagement/companyDetail',
component: () => import('@/views/recruitmentManagement/companyDetail.vue')
},
{
path: '/recruitmentManagement/addAdmin', path: '/recruitmentManagement/addAdmin',
component: () => import('@/views/recruitmentManagement/addAdmin.vue') component: () => import('@/views/recruitmentManagement/addAdmin.vue')
}, },
{ {
path: '/recruitmentManagement/seeMorePosition',
component: () => import('@/views/recruitmentManagement/seeMorePosition.vue')
},
{
path: '/recruitmentManagement/seeMoreCompany',
component: () => import('@/views/recruitmentManagement/seeMoreCompany.vue')
},
{
path: '/specialRecruitment', path: '/specialRecruitment',
component: () => import('@/views/specialRecruitment/index.vue') component: () => import('@/views/specialRecruitment/index.vue')
}, },
......
...@@ -125,3 +125,43 @@ export const getHotPosition = (data: any) => { ...@@ -125,3 +125,43 @@ export const getHotPosition = (data: any) => {
data data
) )
} }
export const getHotCompany = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeFirmPage,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 投递简历
export const sendResume = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiEditService.SendResume,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 人才管理
// 企业更改简历状态
export const updateTalentResume = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiEditService.ChangeState,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 企业人才管理简历查询
export const getTalentResume = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeTalentManagement,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 企业人才管理简历查询
export const getResumeSearch = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.ResumeSearch,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
<template>
<div v-loading="loading" class="detail-container flx-center">
<div class="container">
<div class="detail-filter">
<div class="detail-header">
<div class="company-info">
<div style="display: flex">
<img
src="@/assets/img/icon-can.png"
width="96"
height="96"
style="border-radius: 8px; margin-right: 26px"
/>
<div class="flx-column-start-between" style="justify-content: space-evenly">
<div class="position-name">公司名称</div>
<div class="flx-align-center">
<span>融资情况</span>
<el-divider direction="vertical" style="border-left: 1px solid #274e80" />
<span>公司规模</span>
<el-divider direction="vertical" style="border-left: 1px solid #274e80" />
<span>公司类型</span>
</div>
</div>
</div>
<div style="margin-top: 17px">
<span style="font-size: 60px; margin: 4px 6px 0 0">20</span>
<span>在招职位</span>
</div>
</div>
<div class="company-switch">
<span
:style="{ color: activeName ? '#177cfa' : '' }"
style="margin-right: 64px"
@click="activeName = true"
>公司简介</span
>
<span :style="{ color: activeName ? '' : '#177cfa' }" @click="activeName = false"
>招聘职位(20)</span
>
</div>
</div>
<div v-if="activeName">
<div class="hot-position">
<div class="flx-justify-between" style="margin-bottom: 24px">
<span class="desc-title" style="margin-bottom: 0">热招职位</span>
<div class="flx-align-center" style="cursor: pointer">
<span style="font-size: 18px; color: #177cfa">查看全部20个职位</span>
<el-icon color="#177CFA"><i-ep-CaretRight /></el-icon>
</div>
</div>
<div class="position-list">
<div v-for="item in 4" :key="item" class="position-item">
<div class="flx-justify-between" style="margin-bottom: 15px">
<span class="nowrap-ellipsis" style="display: inline-block; width: 135px"
>软件测试 (学信网软件测asdasdas试)</span
>
<span style="font-size: 18px; color: #ff3333">11-15K</span>
</div>
<div>
<span class="position-label">深圳 福田区 新洲</span>
<span class="position-label">经验不限</span>
</div>
</div>
</div>
</div>
<div class="company-info">
<span class="desc-title">公司福利</span>
<div style="margin-top: 24px">
<span class="position-label">深圳 福田区 新洲</span>
<span class="position-label">经验不限</span>
<span class="position-label">经验不限</span>
</div>
</div>
</div>
<div v-else>
<div class="position-type">
<div style="display: flex; margin-bottom: 16px">
<span class="desc-title" style="margin-bottom: 0; width: 72px">职位类型</span>
<div class="type-list">
<span class="type-item">全部(20)</span>
<span class="type-item">运营(1)</span>
<span class="type-item">销售(9)</span>
<span v-for="item in 20" :key="item" class="type-item">咨询(10)</span>
</div>
</div>
<div class="select-list">
<customSelect
v-for="(item, index) in filterList"
:key="index"
v-model="queryList.Filter[item.prop]"
:name="item.name"
:list="item.list"
@change="selectChange($event, index)"
/>
</div>
</div>
<morePosition ref="morePositionRef" />
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { getInformation } from '@/services/api/common'
import customSelect from '@/components/customSelect.vue'
import morePosition from './components/morePosition.vue'
const morePositionRef = ref()
const loading = ref(false)
const activeName = ref(false)
const filterList = ref([
{
name: '工作经验',
prop: 'FEXPERIENCE',
list: []
},
{
name: '薪资待遇',
list: [],
prop: 'SalaryRange'
},
{
name: '学历要求',
list: [],
prop: 'FEDUCATIONALBACKGROUND'
}
])
const queryList = ref({
pageIndex: 1,
pageSize: 10,
Filter: {
//传id
FNAME: '', //标题
FEXPERIENCE: '', //经验
SalaryRange: '', //薪资范围
FEDUCATIONALBACKGROUND: '' //学历
} as any
})
const positionList = ref([] as any)
const informationData = ref()
const selectChange = (e: any, index: number) => {}
const init = async () => {
const res: any = await getInformation({
AuxiliaryS: ['Experience', 'SalaryRange', 'Degree2']
})
if (res.code === 200) {
informationData.value = res.data || {}
const item = { FDATAVALUE: '不限', FDESCRIPTION: '不限', FENTRYID: ' ' }
res.data.Experience.push(item)
res.data.SalaryRange.push(item)
res.data.Degree2.push(item)
filterList.value[0].list = res.data.Experience
filterList.value[1].list = res.data.SalaryRange
filterList.value[2].list = res.data.Degree2
morePositionRef.value.init()
}
}
onMounted(() => {
init()
})
</script>
<style lang="scss" scoped>
@import url(./style/companyDetail.scss);
</style>
<template>
<el-dialog :modelValue="show" :title="title" width="25%" :before-close="handleClose">
<el-form ref="formRef" :model="form" :rules="rules" hide-required-asterisk label-position="top">
<el-form-item v-if="type === 'SkillCertificate'" label="" prop="FSkillCertificate">
<el-input v-model="form.FSkillCertificate" size="large" :placeholder="placeholder" />
</el-form-item>
<el-form-item v-else label="" prop="FCredentials">
<el-input v-model="form.FCredentials" size="large" :placeholder="placeholder" />
</el-form-item>
</el-form>
<template #footer>
<el-button size="large" style="width: 100px" @click="handleClose">取消</el-button>
<el-button size="large" type="primary" style="width: 100px" @click="onConfirm"
>完成</el-button
>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { updateResume } from '@/services/api/recruitmentManagement'
const props = defineProps({
show: {
type: Boolean,
default: false
},
type: {
type: String,
default: 'FSkillCertificate'
},
title: {
type: String,
default: '添加证书'
},
placeholder: {
type: String,
default: '请输入证书'
},
data: {
type: String,
default: ''
}
})
const emits = defineEmits(['update:show', 'init'])
const form = ref({
FSkillCertificate: '',
FCredentials: ''
})
const validateName = (rule: any, value: string, callback: any) => {
if (value.includes(',')) {
callback(new Error('证书名称不能包含逗号'))
} else {
callback()
}
}
const rules = ref({
FSkillCertificate: [
{ required: true, message: '技能证书名称不能为空', trigger: 'blur' },
{ validator: validateName, trigger: 'blur' }
],
FCredentials: [
{ required: true, message: '资料证书名称不能为空', trigger: 'blur' },
{ validator: validateName, trigger: 'blur' }
]
})
const formRef = ref()
const onConfirm = async () => {
await formRef.value?.validate(async (valid: boolean) => {
if (valid) {
let params
if (props.type === 'SkillCertificate') {
params = {
NeedUpDateFields: ['FSkillCertificate'],
IsDeleteEntry: 'false',
Model: {
FID: 0,
FSkillCertificate:
props.data !== ' '
? props.data + ',' + form.value.FSkillCertificate
: form.value.FSkillCertificate //技能证书
}
}
} else {
params = {
NeedUpDateFields: ['FCredentials'],
IsDeleteEntry: 'false',
Model: {
FID: 0,
FCredentials:
props.data !== ' '
? props.data + ',' + form.value.FCredentials
: form.value.FCredentials
}
}
}
const res: any = await updateResume({ Parmeter: params })
if (res.code === 200) {
ElNotification.success({
title: '添加证书',
message: '添加成功'
})
handleClose()
emits('init')
}
}
})
}
const handleClose = () => {
formRef.value?.resetFields()
emits('update:show', false)
}
defineExpose({
form
})
</script>
<style lang="scss" scoped></style>
<template> <template>
<div v-show="show" class="edit-expected-position"> <div v-show="show" class="edit-expected-position">
<el-form <el-form ref="formRef" :model="form" :rules="rules" hide-required-asterisk label-position="top">
ref="formRef"
:model="form"
:rules="rules"
hide-required-asterisk
label-position="top"
@close="handleClose"
>
<el-row :gutter="28"> <el-row :gutter="28">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="学校名称" prop="FLearningName"> <el-form-item label="学校名称" prop="FLearningName">
......
<template> <template>
<div v-show="show" class="edit-expected-position"> <div v-show="show" class="edit-expected-position">
<el-form <el-form ref="formRef" :model="form" :rules="rules" hide-required-asterisk label-position="top">
ref="formRef"
:model="form"
:rules="rules"
hide-required-asterisk
label-position="top"
@close="handleClose"
>
<el-row :gutter="28"> <el-row :gutter="28">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="求职类型"> <el-form-item label="求职类型">
......
<template>
<div></div>
<div class="position-content">
<div class="position-content__list">
<div v-for="item in positionList" :key="item" class="position-content__item enterprise">
<div class="enterprise-tp" @click="toPositionDetail(item.JobName)">
<div class="flx-justify-between">
<div class="item-lf nowrap-ellipsis" :title="item.JobName">
{{ item.JobName }}
</div>
<div class="item-rg">{{ item.FMINIMUMWAGE }}-{{ item.FMAXIMUMSALARY }}</div>
</div>
<div class="position-content__item-ft">
<span class="nowrap-ellipsis">{{
`${item.FWORKPLACE.split('/')[0]} ${item.FWORKPLACE.split('/')[1]} ${
item.FWORKPLACE.split('/')[2]
}`
}}</span>
<span>{{ item.FEXPERIENCE }}</span>
<span>{{ item.FEDUCATIONALBACKGROUND }}</span>
</div>
</div>
<div class="enterprise-bt flx-justify-between">
<div class="flx-align-center">
<img :src="baseURL + '/' + item.FLOGO" width="24" height="24" />
<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>
<div class="position-content__item">eqwe</div>
</div>
<div class="position-content__detail">
<div class="position-content__detail__tp">
<div>
<div class="flx-align-center">
<span class="position-title">高级声学工程师</span>
<span style="font-size: 24px; color: #ff3333">16-30k</span>
</div>
<div class="flx-align-center" style="margin-top: 6px; font-size: 14px">
<div class="flx-align-center" style="margin-right: 12px">
<img src="@/assets/img/icon-map1.png" />
<span>{{ '深圳' }}</span>
</div>
<div class="flx-align-center" style="margin-right: 12px">
<img src="@/assets/img/icon-resume8.png" />
<span>{{ '10年以上经验' }}</span>
</div>
<div class="flx-align-center">
<img src="@/assets/img/icon-resume.png" />
<span>{{ '本科' }}</span>
</div>
</div>
</div>
<span class="resume-btn">投递简历</span>
</div>
<span class="desc-title" style="margin-bottom: 16px">职位描述</span>
<div class="flx-align-center" style="margin-bottom: 18px">
<span class="keyWords">带团队</span>
<span class="keyWords">带团队</span>
<span class="keyWords">带团队</span>
</div>
<pre>
1.负责新销售团队的搭建、管理和组织,制定销售目标和销售策略,确保团队实现业绩目标,6.主持新员工的货代行业业务培训,确保团队成员对货运行业有深入的理解和认识。</pre
>
<el-divider />
<span class="desc-title" style="margin-bottom: 16px">工作地址</span>
<div class="map-info">
<div class="map-addr">
<el-icon color="#177CFA" style="margin-right: 4px"><i-ep-LocationFilled /></el-icon>
奋成智谷大厦
</div>
<qqMap ref="mapRef" />
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { baseURL } from '@/services'
import qqMap from '@/components/qqMap.vue'
defineProps({
positionList: {
type: Array,
default: () => []
} as any
})
const router = useRouter()
const mapRef: any = ref()
const toPositionDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/positionDetail', query: { FID } })
}
const init = async () => {
setTimeout(() => {
mapRef.value.initMap('广东省深圳市宝安区奋成智谷大厦A座')
}, 300)
}
defineExpose({
init
})
</script>
<style lang="scss" scoped>
.position-content {
display: flex;
width: 100%;
.position-content__list {
width: 428px;
display: flex;
flex-direction: column;
margin-right: 16px;
.position-content__item {
width: 100%;
margin-bottom: 16px;
box-sizing: border-box;
background: #ffffff;
border-radius: 12px;
padding: 26px 20px;
cursor: pointer;
.item-lf {
width: 183px;
// height: 14px;
font-size: 16px;
font-weight: 400;
color: #222222;
// line-height: 14px;
text-align: left;
}
.item-rg {
font-size: 18px;
font-weight: 400;
color: #ff3333;
}
.position-content__item-ft {
margin-top: 16px;
display: flex;
span:first-child {
width: 40%;
}
span {
display: inline-block;
padding: 6px 12px;
background: #f8f8f8;
border-radius: 4px;
line-height: 24px;
font-size: 14px;
font-weight: 400;
color: #666666;
margin-right: 8px;
}
}
}
}
.position-content__detail {
flex: 1;
background: #ffffff;
border-radius: 12px;
padding: 24px 20px;
.position-content__detail__tp {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
.position-title {
font-size: 30px;
font-weight: 500;
color: #222222;
margin-right: 34px;
}
.resume-btn {
display: block;
width: 120px;
height: 43px;
line-height: 43px;
background: #177cfa;
border-radius: 6px;
font-size: 18px;
font-weight: 500;
color: #ffffff;
text-align: center;
cursor: pointer;
}
}
}
}
.desc-title {
display: inline-block;
font-size: 18px;
color: #000000;
margin-bottom: 24px;
}
pre {
white-space: pre-wrap;
}
</style>
<template> <template>
<div v-show="show" class="personal-advantages"> <div v-show="show" class="personal-advantages">
<div class="edit-info">编辑个人优势</div> <div class="edit-info">编辑个人优势</div>
<el-form <el-form ref="formRef" :model="form.Parmeter.Model" :rules="rules" hide-required-asterisk>
ref="formRef"
:model="form.Parmeter.Model"
:rules="rules"
hide-required-asterisk
@close="handleClose"
>
<el-form-item label="" prop="FPersonalStrengths"> <el-form-item label="" prop="FPersonalStrengths">
<el-input <el-input
v-model="form.Parmeter.Model.FPersonalStrengths" v-model="form.Parmeter.Model.FPersonalStrengths"
......
<template> <template>
<div v-show="show" class="edit-expected-position"> <div v-show="show" class="edit-expected-position">
<el-form <el-form ref="formRef" :model="form" :rules="rules" hide-required-asterisk label-position="top">
ref="formRef"
:model="form"
:rules="rules"
hide-required-asterisk
label-position="top"
@close="handleClose"
>
<el-row :gutter="28"> <el-row :gutter="28">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目名称" prop="FProjectName"> <el-form-item label="项目名称" prop="FProjectName">
......
<template> <template>
<el-tabs v-model="activeName" stretch> <el-tabs v-model="activeName" v-loading="loading" stretch @tab-click="handleClick">
<el-tab-pane <el-tab-pane
v-for="(item, index) in recruitStatus" v-for="(item, index) in recruitStatus"
:key="index" :key="index"
:label="item.status + ' ' + item.value" :label="item.status + ' ' + item.value"
:name="item.status" :name="item.type"
> >
<div v-for="(col, colIndex) in 4" :key="colIndex" class="tab-item"> <div v-if="talentList.length">
<div class="tab-item-tp"> <div v-for="col in talentList" :key="col.DeliverFID" class="tab-item">
<div class="tab-item-tp-lf"> <div class="tab-item-tp">
<el-avatar :src="can" size="large" /> <div class="tab-item-tp-lf" @click="openResume">
<div class="user-info"> <el-avatar :src="baseURL + '/' + col.FPHOTOS" size="large" />
<div>龙昌萍</div> <div class="user-info">
<div class="flx-align-center"> <div>{{ col.UserName }}</div>
<span>未知</span> <div class="flx-align-center">
<el-divider direction="vertical" style="margin-bottom: 0" /> <span>{{ col.FSEX === '0' ? '男' : '女' }}</span>
<span>20岁</span> <el-divider direction="vertical" style="margin-bottom: 0" />
</div> <span>{{ col.Age }}</span>
<div class="flx-align-center"> </div>
<img src="@/assets/img/icon-learn-time.png" /> <div class="flx-align-center">
<span style="margin-left: 3px">在职求职中</span> <img src="@/assets/img/icon-learn-time.png" />
<span style="margin-left: 3px">{{ selectDepartRemain(col.FDEPARTREMAIN) }}</span>
</div>
<div class="flx-align-center">
<img src="@/assets/img/icon-stutus.png" />
<span style="margin-left: 3px">{{
col.FGoWorkCount
? col.FGoWorkCount < 10
? `工作${col.FGoWorkCount}年`
: '10年以上经验'
: ''
}}</span>
</div>
</div> </div>
</div>
<div class="tab-item-tp-rg">
<div class="flx-align-center"> <div class="flx-align-center">
<img src="@/assets/img/icon-stutus.png" /> <span class="info-label" @click="talentStatusChange('B', col.DeliverFID)"
<span style="margin-left: 3px">2021-09至2024-07</span> >简历待定</span
>
<span class="info-label" @click="talentStatusChange('C', col.DeliverFID)"
>安排面试</span
>
<el-dropdown>
<span class="info-label">更多</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="talentStatusChange('D', col.DeliverFID)"
>已面试</el-dropdown-item
>
<el-dropdown-item @click="talentStatusChange('E', col.DeliverFID)"
>已录用</el-dropdown-item
>
<el-dropdown-item @click="talentStatusChange('F', col.DeliverFID)"
>已入职</el-dropdown-item
>
<el-dropdown-item @click="talentStatusChange('G', col.DeliverFID)"
>人才库</el-dropdown-item
>
<el-dropdown-item @click="talentStatusChange('H', col.DeliverFID)"
>人才储备</el-dropdown-item
>
</el-dropdown-menu>
</template>
</el-dropdown>
</div> </div>
</div> <!-- <div class="recommend flx-align-center">
</div>
<div class="tab-item-tp-rg">
<div class="flx-align-center">
<span class="info-label">简历待定</span>
<span class="info-label">安排面试</span>
<el-dropdown>
<span class="info-label">更多</span>
<template #dropdown>
<el-dropdown-menu>
<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>
</template>
</el-dropdown>
</div>
<!-- <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"> <div>
<div> <span class="user-label">{{ col.FEDUCATIONBACKGROUND }}</span>
<span class="user-label">大专</span> <el-divider direction="vertical" />
<el-divider direction="vertical" /> <span class="user-label">{{ col.FLEARNINGNAME }}</span>
<span class="user-label">长江工程职业技术学校</span> <el-divider direction="vertical" />
<el-divider direction="vertical" /> <span class="user-label">{{ col.FSPECIALTY }}</span>
<span class="user-label">计算机软件技术</span> </div>
</div> <div>
<div> <span class="user-label">{{ col.JobName }}</span>
<span class="user-label">抖音运营</span> <el-divider direction="vertical" />
<el-divider direction="vertical" /> <span class="user-label">{{ col.FDELIVERYTIME }}投递</span>
<span class="user-label">2023/07/10投递</span> </div>
<el-divider direction="vertical" />
<span class="user-label">3323234</span>
</div> </div>
</div> </div>
<customPagination
:pageSize="queryList.pageSize"
:pageIndex="queryList.pageIndex"
:total="queryList.total"
@current-change="currentChange"
/>
</div> </div>
<el-empty v-else description="暂无数据" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<previewResume v-model:show="previewResumeShow" :data="resumeData" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { recruitStatus } from '../config/index' import { baseURL } from '@/services'
import can from '@/assets/img/icon-can.png' import { recruitStatus, jobStatus } from '../config/index'
import {
getTalentResume,
updateTalentResume,
getResume
} from '@/services/api/recruitmentManagement'
import customPagination from '@/components/customPagination.vue'
import previewResume from './previewResume.vue'
const activeName = ref('A')
const loading = ref(true)
const previewResumeShow = ref(false)
// const rateValue = ref(4)
const talentList = ref([] as any)
const resumeData = ref()
const queryList = ref({
pageIndex: 1,
pageSize: 10,
Type: 'A',
total: 0
})
// 设置求职状态
const selectDepartRemain = (departRemain: string) => {
let row = jobStatus.find((item: any) => item.value === departRemain)
return row ? row.label : jobStatus[3].label
}
const openResume = async () => {
loading.value = true
const res: any = await getResume()
if (res.code === 200) {
resumeData.value = res.data
previewResumeShow.value = true
}
}
const currentChange = (pageIndex: number) => {
queryList.value.pageIndex = pageIndex
init()
}
const handleClick = (tab: any) => {
queryList.value.Type = tab.props.name
init()
}
const talentStatusChange = async (Type: string, DeliverFID: number) => {
const data = {
DeliverFID, //投递记录id
Type //更改类型
}
const res: any = await updateTalentResume(data)
if (res.code === 200) {
init()
ElMessage.success(res.msg)
}
}
const init = async () => {
loading.value = true
const res: any = await getTalentResume(queryList.value)
if (res.code === 200) {
talentList.value = res.data?.datalist || []
queryList.value.total = res.total
for (const key in res.data?.StatisticsCount) {
const item = recruitStatus.value.find((item: any) => item.type === key)
if (item) {
item.value = res.data?.StatisticsCount[key] + '份'
}
}
loading.value = false
}
}
const activeName = ref('简历未查看') defineExpose({
const rateValue = ref(4) init
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -92,6 +195,7 @@ const rateValue = ref(4) ...@@ -92,6 +195,7 @@ const rateValue = ref(4)
.tab-item-tp-lf { .tab-item-tp-lf {
display: flex; display: flex;
cursor: pointer;
.user-info { .user-info {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
......
...@@ -7,12 +7,11 @@ ...@@ -7,12 +7,11 @@
:rules="rules" :rules="rules"
label-position="top" label-position="top"
hide-required-asterisk hide-required-asterisk
@close="handleClose"
> >
<el-row :gutter="28"> <el-row :gutter="28">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="姓名" prop="FName"> <el-form-item label="姓名" prop="FName">
<el-input v-model="form.Model.FName" size="large" /> <el-input v-model="form.Model.FName" size="large" placeholder="请输入姓名" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
...@@ -20,7 +19,7 @@ ...@@ -20,7 +19,7 @@
<el-select <el-select
v-model="form.Model.FDepartRemain" v-model="form.Model.FDepartRemain"
size="large" size="large"
placeholder=" " placeholder="选择求职状态"
style="width: 100%" style="width: 100%"
> >
<el-option <el-option
...@@ -49,7 +48,7 @@ ...@@ -49,7 +48,7 @@
<el-select <el-select
v-model="form.Model.FMyIdentity" v-model="form.Model.FMyIdentity"
size="large" size="large"
placeholder=" " placeholder="请选择身份"
style="width: 100%" style="width: 100%"
> >
<el-option label="职场人" value="0" /> <el-option label="职场人" value="0" />
...@@ -88,12 +87,12 @@ ...@@ -88,12 +87,12 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="微信号 (选填)"> <el-form-item label="微信号 (选填)">
<el-input v-model="form.Model.FWechat" size="large" /> <el-input v-model="form.Model.FWechat" size="large" placeholder="请输入微信号" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="邮箱 (选填)"> <el-form-item label="邮箱 (选填)" prop="FEmail">
<el-input v-model="form.Model.FEmail" size="large" /> <el-input v-model="form.Model.FEmail" size="large" placeholder="请输入邮箱" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" class="edit-resume-btn"> <el-col :span="12" class="edit-resume-btn">
...@@ -153,7 +152,7 @@ const form: any = ref({ ...@@ -153,7 +152,7 @@ const form: any = ref({
const rules = { const rules = {
FName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }], FName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
FEmail: [ FEmail: [
{ required: true, message: '邮箱不能为空', trigger: 'blur' }, // { required: true, message: '邮箱不能为空', trigger: 'blur' },
{ type: 'email', message: '请输入有效的邮箱地址', trigger: 'blur' } { type: 'email', message: '请输入有效的邮箱地址', trigger: 'blur' }
], ],
FSex: [{ required: true, message: '性别不能为空', trigger: 'change' }], FSex: [{ required: true, message: '性别不能为空', trigger: 'change' }],
......
<template> <template>
<div v-show="show" class="edit-expected-position"> <div v-show="show" class="edit-expected-position">
<el-form <el-form ref="formRef" :model="form" :rules="rules" hide-required-asterisk label-position="top">
ref="formRef"
:model="form"
:rules="rules"
hide-required-asterisk
label-position="top"
@close="handleClose"
>
<el-row :gutter="28"> <el-row :gutter="28">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="公司名称" prop="FCompanyName"> <el-form-item label="公司名称" prop="FCompanyName">
......
import { useUserInfoStore } from '@/stores/modules/userInfo'
const userInfoStore = useUserInfoStore()
const companyInfo = computed(() => userInfoStore.getCompanyInfo)
export const filterList = ref([ export const filterList = ref([
{ {
name: '工作经验', name: '工作经验',
...@@ -31,18 +26,16 @@ export const filterList = ref([ ...@@ -31,18 +26,16 @@ export const filterList = ref([
} }
]) ])
export const recruitStatus = computed(() => { export const recruitStatus = ref([
return [ { type: 'A', status: '简历未查看', value: '' },
{ status: '简历未查看', value: companyInfo.value?.NotViewed + '份' }, { type: 'B', status: '简历待定', value: '' },
{ status: '简历待定', value: companyInfo.value?.Pending + '份' }, { type: 'C', status: '安排面试', value: '' },
{ status: '安排面试', value: companyInfo.value?.Arrange + '份' }, { type: 'D', status: '已面试', value: '' },
{ status: '已面试', value: companyInfo.value?.HaveInterview + '份' }, { type: 'E', status: '已录用', value: '' },
{ status: '已录用', value: companyInfo.value?.HaveHired + '份' }, { type: 'F', status: '已入职', value: '' },
{ status: '已入职', value: companyInfo.value?.AlreadyBoard + '份' }, { type: 'G', status: '人才库', value: '' },
{ status: '人才库', value: companyInfo.value?.TalentPool + '份' }, { type: 'H', status: '人才储备', value: '' }
{ status: '人才储备', value: companyInfo.value?.Blacklist + '份' } ])
]
})
export const positionList = [ export const positionList = [
{ name: '全部职位', type: '' }, { name: '全部职位', type: '' },
......
...@@ -324,6 +324,15 @@ const submit = async () => { ...@@ -324,6 +324,15 @@ const submit = async () => {
} }
const res: any = await editCompanyInfo(data) const res: any = await editCompanyInfo(data)
if (res.code === 200) { if (res.code === 200) {
// 编辑成功后更新内存公司信息
userInfoStore.companyInfo.ADDRESSS = state.form.FAddresss
userInfoStore.companyInfo.FCOMPANYPROFILE = state.form.FCompanyProfile
userInfoStore.companyInfo.FSCALE = state.informationData?.Member.find(
(item: any) => item.FNUMBER === state.form.FScaleS
)?.FDATAVALUE
userInfoStore.companyInfo.FFINANCING = state.informationData?.Financing.find(
(item: any) => item.FNUMBER === state.form.FFinancingS
)?.FDATAVALUE
ElNotification({ ElNotification({
title: '企业编辑', title: '企业编辑',
message: res.msg, message: res.msg,
......
...@@ -273,7 +273,7 @@ ...@@ -273,7 +273,7 @@
添加 添加
</div> </div>
</div> </div>
<projectExperience v-model:show="state.projectExperienceShow" projectRef /> <projectExperience v-model:show="state.projectExperienceShow" @init="init" />
<div class="resume-content"> <div class="resume-content">
<div <div
v-for="(item, index) in state.resumeData?.Xmdata || []" v-for="(item, index) in state.resumeData?.Xmdata || []"
...@@ -386,32 +386,60 @@ ...@@ -386,32 +386,60 @@
<div id="resume6" class="resume-item"> <div id="resume6" class="resume-item">
<div class="flx-justify-between"> <div class="flx-justify-between">
<div class="resume-label flx-center" style="width: 170px">自定义添加</div> <div class="resume-label flx-center" style="width: 170px">自定义添加</div>
<div class="flx-align-center" style="color: #177cfa; cursor: pointer"> <!-- <div class="flx-align-center" style="color: #177cfa; cursor: pointer">
<el-icon color="#177CFA" style="margin-right: 4px" <el-icon color="#177CFA" style="margin-right: 4px"
><i-ep-CirclePlusFilled ><i-ep-CirclePlusFilled
/></el-icon> /></el-icon>
添加 添加
</div> </div> -->
</div> </div>
<div class="resume-content"> <div class="resume-content">
<el-row style="width: 100%"> <el-row style="width: 100%">
<el-col :span="11" class="custom-col"> <el-col :span="11">
<div class="flx-direction-column"> <div class="custom-col" @click="openCertificate('FCredentials')">
<span>资格证书</span> <div class="flx-direction-column">
<span style="color: #666666; font-size: 16px; margin-top: 12px" <span>资格证书</span>
>尽可能选择有含金量的证书</span <span style="color: #666666; font-size: 16px; margin-top: 12px"
>尽可能选择有含金量的证书</span
>
</div>
<img src="@/assets/img/icon-resume6.png" style="cursor: pointer" />
</div>
<div class="certificate-tag">
<el-tag
v-for="(item, index) in credentialsTag"
:key="index"
class="tag"
type="info"
size="large"
closable
@close="tagClose(index, 'Credentials')"
>{{ item }}</el-tag
> >
</div> </div>
<img src="@/assets/img/icon-resume6.png" style="cursor: pointer" />
</el-col> </el-col>
<el-col :span="11" class="custom-col"> <el-col :span="11">
<div class="flx-direction-column"> <div class="custom-col" @click="openCertificate('SkillCertificate')">
<span>技能证书</span> <div class="flx-direction-column">
<span style="color: #666666; font-size: 16px; margin-top: 12px" <span>技能证书</span>
>尽可能选择有含金量的证书</span <span style="color: #666666; font-size: 16px; margin-top: 12px"
>尽可能选择有含金量的证书</span
>
</div>
<img src="@/assets/img/icon-resume6.png" style="cursor: pointer" />
</div>
<div class="certificate-tag">
<el-tag
v-for="(item, index) in skillCertificateTag"
:key="index"
class="tag"
type="info"
size="large"
closable
@close="tagClose(index, 'SkillCertificate')"
>{{ item }}</el-tag
> >
</div> </div>
<img src="@/assets/img/icon-resume6.png" style="cursor: pointer" />
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
...@@ -518,6 +546,14 @@ ...@@ -518,6 +546,14 @@
:url="state.fileUrl" :url="state.fileUrl"
:title="state.previewTitle" :title="state.previewTitle"
/> />
<certificate
v-model:show="state.certificateShow"
:title="state.certificateTitle"
:placeholder="state.certificatePlaceholder"
:type="state.certificateType"
:data="state.certificateData"
@init="init"
/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
...@@ -531,6 +567,7 @@ import { ...@@ -531,6 +567,7 @@ import {
import { getInformation } from '@/services/api/common' import { getInformation } from '@/services/api/common'
import { useUserInfoStore } from '@/stores/modules/userInfo' import { useUserInfoStore } from '@/stores/modules/userInfo'
import { baseURL } from '@/services' import { baseURL } from '@/services'
import { deepCopy } from '@/utils'
import userInfo from './components/userInfo.vue' import userInfo from './components/userInfo.vue'
import personalAdvantages from './components/personalAdvantages.vue' import personalAdvantages from './components/personalAdvantages.vue'
import expectedPosition from './components/expectedPosition.vue' import expectedPosition from './components/expectedPosition.vue'
...@@ -540,6 +577,7 @@ import educationExperience from './components/educationExperience.vue' ...@@ -540,6 +577,7 @@ import educationExperience from './components/educationExperience.vue'
import dragUpload from '@/components/dragUpload.vue' import dragUpload from '@/components/dragUpload.vue'
import previewResume from './components/previewResume.vue' import previewResume from './components/previewResume.vue'
import previewFile from '@/components/previewFile.vue' import previewFile from '@/components/previewFile.vue'
import certificate from './components/certificate.vue'
import dayjs from 'dayjs' import dayjs from 'dayjs'
const userInfoStore = useUserInfoStore() const userInfoStore = useUserInfoStore()
...@@ -553,7 +591,14 @@ const state = reactive({ ...@@ -553,7 +591,14 @@ const state = reactive({
dragShow: false, dragShow: false,
previewResumeShow: false, previewResumeShow: false,
previewFileShow: false, previewFileShow: false,
// 自定义证书参数
certificateShow: false,
certificateTitle: '',
certificateType: '',
certificatePlaceholder: '',
previewTitle: '', previewTitle: '',
certificateData: '',
resumeActive: '个人信息', resumeActive: '个人信息',
resumeData: {} as any, resumeData: {} as any,
informationData: {} as any, informationData: {} as any,
...@@ -603,6 +648,7 @@ const maskedWechat = computed(() => { ...@@ -603,6 +648,7 @@ const maskedWechat = computed(() => {
return '' return ''
} }
}) })
const maskedUserPhone = computed(() => { const maskedUserPhone = computed(() => {
const { FUserPhone } = state.resumeData?.Jbdata || {} const { FUserPhone } = state.resumeData?.Jbdata || {}
if (FUserPhone && FUserPhone.trim()) { if (FUserPhone && FUserPhone.trim()) {
...@@ -612,6 +658,18 @@ const maskedUserPhone = computed(() => { ...@@ -612,6 +658,18 @@ const maskedUserPhone = computed(() => {
} }
}) })
const credentialsTag = computed(() => {
if (!state.resumeData?.Jbdata?.FCredentials.trim()) return []
let list = state.resumeData?.Jbdata?.FCredentials?.split(',') || []
return list.length ? list : []
})
const skillCertificateTag = computed(() => {
if (!state.resumeData?.Jbdata?.FSkillCertificate.trim()) return []
let list = state.resumeData?.Jbdata?.FSkillCertificate?.split(',') || []
return list.length ? list : []
})
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].label return row ? row.label : jobStatus[3].label
...@@ -665,6 +723,57 @@ const openFile = (row: any) => { ...@@ -665,6 +723,57 @@ const openFile = (row: any) => {
state.previewFileShow = true state.previewFileShow = true
} }
const openCertificate = (type: string) => {
switch (type) {
case 'SkillCertificate':
state.certificateTitle = '添加技能证书'
state.certificatePlaceholder = '请输入技能证书名称'
state.certificateType = 'SkillCertificate'
state.certificateData = state.resumeData?.Jbdata.FSkillCertificate
break
default:
state.certificateTitle = '添加资格证书'
state.certificatePlaceholder = '请输入资格证书名称'
state.certificateType = 'FCredentials'
state.certificateData = state.resumeData?.Jbdata.FCredentials
break
}
state.certificateShow = true
}
const tagClose = async (index: number, type: string) => {
let params
if (type === 'Credentials') {
let list = deepCopy(credentialsTag.value)
list.splice(index, 1)
let str = list.join(',')
params = {
NeedUpDateFields: ['FCredentials'],
IsDeleteEntry: 'false',
Model: {
FID: 0,
FCredentials: str //技能证书
}
}
} else {
let list = deepCopy(skillCertificateTag.value)
list.splice(index, 1)
let str = list.join(',')
params = {
NeedUpDateFields: ['FSkillCertificate'],
IsDeleteEntry: 'false',
Model: {
FID: 0,
FSkillCertificate: str //技能证书
}
}
}
const res: any = await updateResume({ Parmeter: params })
if (res.code === 200) {
init()
}
}
// 修改个人信息 // 修改个人信息
const userInfoClick = () => { const userInfoClick = () => {
const { FWechat, FUserPhone, FEmail } = state.resumeData.Jbdata const { FWechat, FUserPhone, FEmail } = state.resumeData.Jbdata
......
...@@ -69,7 +69,7 @@ import resume from './components/resume.vue' ...@@ -69,7 +69,7 @@ import resume from './components/resume.vue'
const router = useRouter() const router = useRouter()
const userInfoStore = useUserInfoStore() const userInfoStore = useUserInfoStore()
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const manageActive = ref('职位管理') const manageActive = ref('人才管理')
const talentRef = ref() const talentRef = ref()
const positionRef = ref() const positionRef = ref()
...@@ -114,6 +114,7 @@ watch( ...@@ -114,6 +114,7 @@ watch(
setTimeout(() => { setTimeout(() => {
switch (newVal) { switch (newVal) {
case '人才管理': case '人才管理':
talentRef.value?.init()
break break
case '职位管理': case '职位管理':
positionRef.value?.initCompanyPositionList() positionRef.value?.initCompanyPositionList()
......
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
</div> </div>
</div> </div>
<div class="flx-center" style="text-align: center"> <div class="flx-center" style="text-align: center">
<span class="n-more" @click="seeMore">查看更多</span> <span class="n-more" @click="toSeeMorePosition">查看更多</span>
</div> </div>
</div> </div>
<el-empty v-else description="暂无职位" /> <el-empty v-else description="暂无职位" />
...@@ -128,44 +128,53 @@ ...@@ -128,44 +128,53 @@
<div class="hot-company"> <div class="hot-company">
<div class="n-title">热门企业</div> <div class="n-title">热门企业</div>
<div class="company-list"> <div class="company-list">
<div v-for="item in 6" :key="item" class="company-item"> <div v-for="item in hotCompanyList" :key="item.FirmFID" class="company-item">
<div class="company-tp"> <div class="company-tp" @click="toCompanyDetail(item.FirmFID)">
<img src="@/assets/img/icon-zhao.png" width="50" height="50" /> <img :src="baseURL + '/' + item.FLOGO" width="50" height="50" />
<div class="company-tp-rg flx-column-start-between"> <div class="company-tp-rg flx-column-start-between">
<span>博彦科技</span> <span>{{ item.FirmName }}</span>
<div class="company-label"> <div class="company-label">
<span>大专</span> <span>{{ item.FFINANCINGS }}</span>
<el-divider direction="vertical" /> <el-divider direction="vertical" />
<span>1-3年</span> <span>{{ item.FSCALES }}</span>
<el-divider direction="vertical" /> <el-divider direction="vertical" />
<span>招聘2人</span> <span>{{ item.FINDUSTRY }}</span>
</div> </div>
</div> </div>
</div> </div>
<div class="company-bt"> <div class="company-bt">
<div class="company-position-list flx-direction-column"> <div class="company-position-list flx-direction-column">
<div v-for="col in 3" :key="col" class="company-position-item"> <div
v-for="col in item.JobS"
:key="col.JobFID"
class="company-position-item"
@click="toPositionDetail(col.JobFID)"
>
<div class="flx-justify-between" style="margin-bottom: 22px"> <div class="flx-justify-between" style="margin-bottom: 22px">
<div <div
class="nowrap-ellipsis" class="nowrap-ellipsis"
style="width: 207px" style="width: 207px; text-align: left"
title="软件测试 (学信网可查,学信网可查)" :title="col.JobName"
> >
软件测试 (学信网可查,学信网可查) {{ col.JobName }}
</div> </div>
<div> <div>
<span class="salary">6000-8000</span> <span class="salary">{{ col.FMINIMUMWAGE }}-{{ col.FMAXIMUMSALARY }}</span>
<span class="monthly-pay">元/月</span> <span class="monthly-pay">元/月</span>
</div> </div>
</div> </div>
<div class="hot-position-item-ft"> <div class="hot-position-item-ft">
<span>深圳 福田区 新洲</span> <span class="nowrap-ellipsis" :title="col.FWORKPLACE">{{
<span>经验不限 </span> `${col.FWORKPLACE.split('/')[1]} ${col.FWORKPLACE.split('/')[2]} ${
<span>学历不限</span> col.FWORKPLACE.split('/')[3]
}`
}}</span>
<span>{{ col.FEXPERIENCE }} </span>
<span>{{ col.FEDUCATIONALBACKGROUND }}</span>
</div> </div>
</div> </div>
</div> </div>
<div class="company-bt-btn"> <div v-if="item.JobS && item.JobS?.length" class="company-bt-btn">
<span>查看更多职位</span> <span>查看更多职位</span>
</div> </div>
</div> </div>
...@@ -181,12 +190,14 @@ import { baseURL } from '@/services' ...@@ -181,12 +190,14 @@ import { baseURL } from '@/services'
import { import {
getPosition, getPosition,
getUserPostionList, getUserPostionList,
getHotPosition getHotPosition,
getHotCompany
} from '@/services/api/recruitmentManagement' } from '@/services/api/recruitmentManagement'
import { getStreet } from '@/services/api/streetOfficeSpecialTopic' import { getStreet } from '@/services/api/streetOfficeSpecialTopic'
import { getPoster } from '@/services/api/common' 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'
import seeMorePosition from './seeMorePosition.vue'
const router = useRouter() const router = useRouter()
const userInfoStore = useUserInfoStore() const userInfoStore = useUserInfoStore()
...@@ -196,6 +207,7 @@ const FDATAVALUE = ref() ...@@ -196,6 +207,7 @@ const FDATAVALUE = ref()
const streetList = ref() const streetList = ref()
const posterList: any = ref([]) const posterList: any = ref([])
const hotPositionList: any = ref([]) const hotPositionList: any = ref([])
const hotCompanyList: any = ref([])
const querySearch = ref([]) const querySearch = ref([])
const tabsList = [ const tabsList = [
...@@ -243,8 +255,8 @@ const searchChange = (searchValue: string) => { ...@@ -243,8 +255,8 @@ const searchChange = (searchValue: string) => {
router.push({ path: '/recruitmentManagement/personal', query: { searchValue } }) router.push({ path: '/recruitmentManagement/personal', query: { searchValue } })
} }
const seeMore = () => { const toSeeMorePosition = () => {
router.push({ path: '/recruitmentManagement/personal' }) router.push({ path: '/recruitmentManagement/seeMorePosition' })
} }
const subMenuList = computed(() => { const subMenuList = computed(() => {
...@@ -278,6 +290,10 @@ const toPositionDetail = (FID: number) => { ...@@ -278,6 +290,10 @@ const toPositionDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/positionDetail', query: { FID } }) router.push({ path: '/recruitmentManagement/positionDetail', query: { FID } })
} }
const toCompanyDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/companyDetail', query: { FID } })
}
const initHotPosition = async () => { const initHotPosition = async () => {
const res: any = await getHotPosition({ FNUMBER: activeName.value }) const res: any = await getHotPosition({ FNUMBER: activeName.value })
if (res.code === 200) { if (res.code === 200) {
...@@ -285,6 +301,13 @@ const initHotPosition = async () => { ...@@ -285,6 +301,13 @@ const initHotPosition = async () => {
} }
} }
const initHotCompany = async () => {
const res: any = await getHotCompany({ FNUMBER: activeName.value })
if (res.code === 200) {
hotCompanyList.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) {
...@@ -301,6 +324,7 @@ const init = async () => { ...@@ -301,6 +324,7 @@ const init = async () => {
posterList.value = poster.data || [] posterList.value = poster.data || []
} }
await initHotPosition() await initHotPosition()
await initHotCompany()
} }
onMounted(() => { onMounted(() => {
......
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="personal-ct-item-tp-bt" @click.stop="handleDeliver"> <div class="personal-ct-item-tp-bt" @click.stop="submitResume(item.FID)">
<span>投递</span> <span>投递</span>
</div> </div>
</div> </div>
...@@ -120,17 +120,15 @@ ...@@ -120,17 +120,15 @@
<info /> <info />
</div> </div>
</div> </div>
<dragUpload v-model:show="dragShow" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { filterList } from './config/index' import { filterList } from './config/index'
import { getStreet } from '@/services/api/streetOfficeSpecialTopic' import { getStreet } from '@/services/api/streetOfficeSpecialTopic'
import { getInformation } from '@/services/api/common' import { getInformation } from '@/services/api/common'
import { getUserPostionList } from '@/services/api/recruitmentManagement' import { getUserPostionList, sendResume } from '@/services/api/recruitmentManagement'
import { baseURL } from '@/services' import { baseURL } from '@/services'
import customSelect from '@/components/customSelect.vue' import customSelect from '@/components/customSelect.vue'
import dragUpload from '@/components/dragUpload.vue'
import info from './components/info.vue' import info from './components/info.vue'
const route = useRoute() const route = useRoute()
...@@ -140,7 +138,6 @@ const activeName = ref('0') ...@@ -140,7 +138,6 @@ const activeName = ref('0')
const autocompleteRef = ref() const autocompleteRef = ref()
const loading = ref(true) const loading = ref(true)
const filterLoading = ref(true) const filterLoading = ref(true)
const dragShow = ref(false)
const streetList = ref([] as any) const streetList = ref([] as any)
const informationData = ref() const informationData = ref()
const querySearch = ref([]) const querySearch = ref([])
...@@ -206,8 +203,15 @@ const seeMore = () => { ...@@ -206,8 +203,15 @@ const seeMore = () => {
initUserPostionList() initUserPostionList()
} }
const handleDeliver = () => { // 投递简历
dragShow.value = true const submitResume = async (FID: number) => {
const res: any = await sendResume({ JobID: FID })
if (res.code === 200) {
ElNotification.success({
title: '投递简历',
message: '投递成功'
})
}
} }
const toPositionDetail = (FID: number) => { const toPositionDetail = (FID: number) => {
...@@ -218,10 +222,9 @@ const initUserPostionList = async () => { ...@@ -218,10 +222,9 @@ const initUserPostionList = async () => {
filterLoading.value = true filterLoading.value = true
let params = JSON.parse(JSON.stringify(queryList.value)) let params = JSON.parse(JSON.stringify(queryList.value))
for (const key in params.Filter) { for (const key in params.Filter) {
params.Filter[key] = params.Filter[key].trim() if (typeof params.Filter[key] !== 'number')
params.Filter[key] = (params.Filter[key] + '').trim()
} }
console.log(params.Filter)
const res: any = await getUserPostionList(params) const res: any = await getUserPostionList(params)
if (res.code === 200) { if (res.code === 200) {
loading.value = false loading.value = false
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
> >
<el-popover <el-popover
v-if="detailData?.FCORPORATEWELFARE?.length >= 5"
placement="bottom-start" placement="bottom-start"
title="" title=""
:show-arrow="false" :show-arrow="false"
...@@ -62,7 +63,7 @@ ...@@ -62,7 +63,7 @@
<span class="salary" <span class="salary"
>{{ detailData?.FMINIMUMWAGE }}-{{ detailData?.FMAXIMUMSALARY }}</span >{{ detailData?.FMINIMUMWAGE }}-{{ detailData?.FMAXIMUMSALARY }}</span
> >
<span class="deliver">投递简历</span> <span class="deliver" @click="submitResume">投递简历</span>
</div> </div>
</div> </div>
<div class="position-describe"> <div class="position-describe">
...@@ -141,13 +142,11 @@ ...@@ -141,13 +142,11 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { getUserPostionDetail } from '@/services/api/recruitmentManagement' import { getUserPostionDetail, sendResume } from '@/services/api/recruitmentManagement'
import { useGlobalStore } from '@/stores/modules/global'
import { baseURL } from '@/services' import { baseURL } from '@/services'
import info from './components/info.vue' import info from './components/info.vue'
import qqMap from '@/components/qqMap.vue' import qqMap from '@/components/qqMap.vue'
const globalStore = useGlobalStore()
const route = useRoute() const route = useRoute()
const list: any = ref([]) const list: any = ref([])
...@@ -200,16 +199,28 @@ const expandMore = () => { ...@@ -200,16 +199,28 @@ const expandMore = () => {
if (textContainer.classList.contains('expanded')) { if (textContainer.classList.contains('expanded')) {
content.textContent = '收起' content.textContent = '收起'
textContainer.style.maxHeight = textContainer.scrollHeight + 'px' // 动态计算文本高度并设置max-height textContainer.style.maxHeight = textContainer.scrollHeight + 'px' // 动态计算文本高度并设置max-height
expandBtn.style.bottom = '-30%' expandBtn.style.bottom = '-40px'
expandShow.value = false expandShow.value = false
} else { } else {
content.textContent = '查看更多' content.textContent = '查看更多'
textContainer.style.maxHeight = 'calc(3 * 1.3em)' // 恢复初始值 textContainer.style.maxHeight = 'calc(1 * 1.3em)' // 恢复初始值
expandBtn.style.bottom = '-2px' expandBtn.style.bottom = '-4px'
expandShow.value = true expandShow.value = true
} }
} }
// 投递简历
const submitResume = async () => {
const res: any = await sendResume({ JobID: route.query.FID })
if (res.code === 200) {
console.log(res)
ElNotification.success({
title: '投递简历',
message: '投递成功'
})
}
}
const init = async () => { const init = async () => {
const res: any = await getUserPostionDetail({ FID: route.query.FID }) const res: any = await getUserPostionDetail({ FID: route.query.FID })
if (res.code === 200) { if (res.code === 200) {
......
<template>
<div></div>
</template>
<script setup lang="ts"></script>
<style lang="scss" scoped></style>
<template>
<div class="see-more-position">
<div class="container">
<div class="sell-position">
<div class="flx-align-center">
<span class="desc-title">推荐职位</span>
<div class="flx-align-center" style="cursor: pointer">
<span>测试员</span>
<el-divider direction="vertical" />
<span>测试员</span>
<el-divider direction="vertical" />
<div class="flx-align-center">
<el-icon style="margin: 3px 4px 0 0"><i-ep-CirclePlus /></el-icon>
<span>添加求职期望</span>
</div>
</div>
</div>
<div class="select-list">
<customSelect
v-for="(item, index) in filterList"
:key="index"
v-model="queryList.Filter[item.prop]"
:name="item.name"
:list="item.list"
@change="selectChange($event, index)"
/>
</div>
</div>
<morePosition ref="morePositionRef" />
</div>
</div>
</template>
<script setup lang="ts">
import { getInformation } from '@/services/api/common'
import morePosition from './components/morePosition.vue'
import customSelect from '@/components/customSelect.vue'
const queryList = ref({
pageIndex: 1,
pageSize: 10,
Filter: {
//传id
FNAME: '', //标题
FSUBSTREET: '', //街道
FEXPERIENCE: '', //经验
SalaryRange: '', //薪资范围
FEDUCATIONALBACKGROUND: '', //学历
FSCALES: '', //规模
FFINANCINGS: '' //融资情况
} as any
})
const filterList = ref([
{
name: '工作经验',
prop: 'FEXPERIENCE',
list: []
},
{
name: '薪资待遇',
list: [],
prop: 'SalaryRange'
},
{
name: '学历要求',
list: [],
prop: 'FEDUCATIONALBACKGROUND'
},
{
name: '公司规模',
list: [],
prop: 'FSCALES'
},
{
name: '融资情况',
list: [],
prop: 'FFINANCINGS'
}
])
const morePositionRef = ref()
const informationData = ref()
const selectChange = (e: any, index: number) => {}
const init = async () => {
const res: any = await getInformation({
AuxiliaryS: ['Experience', 'SalaryRange', 'Degree2', 'Member', 'Financing']
})
if (res.code === 200) {
informationData.value = res.data
const item = { FDATAVALUE: '不限', FDESCRIPTION: '不限', FENTRYID: ' ' }
res.data.Experience.push(item)
res.data.SalaryRange.push(item)
res.data.Degree2.push(item)
res.data.Member.push(item)
res.data.Financing.push(item)
filterList.value[0].list = res.data.Experience
filterList.value[1].list = res.data.SalaryRange
filterList.value[2].list = res.data.Degree2
filterList.value[3].list = res.data.Member
filterList.value[4].list = res.data.Financing
morePositionRef.value.init()
}
}
onMounted(() => {
init()
})
</script>
<style lang="scss" scoped>
.see-more-position {
display: flex;
justify-content: center;
color: #222222;
font-size: 16px;
margin: 24px 0;
.container {
width: 1316px;
.sell-position {
padding: 24px 20px 14px;
background: #ffffff;
border-radius: 12px;
margin-bottom: 24px;
}
.desc-title {
display: inline-block;
font-size: 18px;
color: #000000;
margin-right: 40px;
}
.select-list {
display: flex;
flex-wrap: wrap;
margin-top: 24px;
}
}
}
</style>
.detail-container {
width: 100%;
.container {
width: 1316px;
display: flex;
padding: 24px 0;
color: #222222;
.detail-filter {
flex: 1;
.detail-header {
background: #ffffff;
border-radius: 12px;
box-sizing: border-box;
.company-info {
border-radius: 12px 12px 0 0;
padding: 34px 32px;
color: #ffffff;
background: #022756;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
.position-name {
font-size: 36px;
font-weight: 500;
margin-bottom: 8px;
}
}
.company-switch {
padding: 16px 32px;
background: #dcecff;
border-radius: 0 0 12px 12px;
span {
cursor: pointer;
}
}
}
.hot-position {
padding: 24px 32px;
margin: 24px 0;
background: #ffffff;
border-radius: 12px;
.position-list {
width: 100%;
display: flex;
.position-item {
cursor: pointer;
box-sizing: border-box;
flex: 0 0 calc((100% - 48px) / 4);
margin-right: 16px;
padding: 12px;
background: #ffffff;
border-radius: 4px;
border: 1px solid #cccccc;
&:last-child {
margin-right: 0;
}
}
}
}
.company-info {
margin-top: 16px;
background: #ffffff;
border-radius: 12px;
box-sizing: border-box;
padding: 24px 36px;
.text-container {
position: relative;
max-height: calc(1 * 1.3em); /* 3行文本的高度,假设行高为1.2em */
overflow: hidden;
margin-bottom: 36px;
}
.expand-btn {
cursor: pointer;
position: absolute;
right: 0;
bottom: -4px;
display: flex;
align-items: center;
justify-content: flex-end;
margin-top: 10px;
color: #177cfa;
width: 120px;
padding: 4px 14px 4px 0;
background: linear-gradient(270deg, #fff 65%, rgba(255, 255, 255, 0) 100%);
box-sizing: border-box;
}
.expanded {
max-height: none;
overflow: visible;
}
.business-info {
background: #f8f8f8;
border-radius: 12px;
padding: 18px 26px 36px;
margin-bottom: 36px;
:deep(.el-descriptions__body) {
background: #f8f8f8;
}
:deep(.is-vertical-label) {
color: #999999;
font-size: 16px;
}
:deep(.is-vertical-content) {
color: #222222;
font-size: 16px;
}
.business-expand {
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
color: #177cfa;
}
}
.map-info {
height: 300px;
.map-addr {
display: flex;
align-items: center;
color: #177cfa;
font-size: 14px;
margin-bottom: 10px;
}
}
}
.position-type {
padding: 24px 20px;
background: #ffffff;
border-radius: 12px;
margin: 16px 0;
.type-list {
flex: 1;
margin-left: 40px;
display: flex;
align-items: center;
flex-wrap: wrap;
.type-item {
cursor: pointer;
margin-right: 52px;
font-size: 16px;
font-weight: 400;
color: #222222;
margin-bottom: 8px;
}
}
.select-list {
display: flex;
flex-wrap: wrap;
}
}
.position-label {
display: inline-block;
background: #f8f8f8;
border-radius: 4px;
padding: 6px 12px;
margin-right: 8px;
font-size: 14px;
font-weight: 400;
color: #666666;
}
}
}
.desc-title {
display: inline-block;
font-size: 18px;
color: #000000;
margin-bottom: 24px;
}
.keyWords {
padding: 4px 12px;
border-radius: 39px;
border: 1px solid #cccccc;
margin-right: 12px;
font-size: 14px;
color: #999999;
}
pre {
white-space: pre-wrap;
}
.round {
display: inline-block;
width: 4px;
height: 4px;
background: #cccccc;
border-radius: 50%;
margin: 0 4px;
}
}
...@@ -232,6 +232,7 @@ ...@@ -232,6 +232,7 @@
max-width: 49%; max-width: 49%;
} }
.custom-col { .custom-col {
cursor: pointer;
padding: 36px 24px !important; padding: 36px 24px !important;
height: 116px; height: 116px;
background: #f8f8f8; background: #f8f8f8;
...@@ -281,4 +282,14 @@ ...@@ -281,4 +282,14 @@
pre { pre {
white-space: pre-wrap; white-space: pre-wrap;
} }
.certificate-tag {
margin-top: 16px;
display: flex;
flex-wrap: wrap;
.tag {
margin: 0 8px 8px 0;
}
}
} }
...@@ -155,6 +155,8 @@ ...@@ -155,6 +155,8 @@
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 24px; margin-top: 24px;
.company-item { .company-item {
display: flex;
flex-direction: column;
cursor: pointer; cursor: pointer;
width: calc((100% - 32px) / 3); width: calc((100% - 32px) / 3);
flex: 0 0 calc((100% - 32px) / 3); flex: 0 0 calc((100% - 32px) / 3);
...@@ -178,7 +180,11 @@ ...@@ -178,7 +180,11 @@
} }
} }
.company-bt { .company-bt {
flex: 1;
padding: 26px 20px; padding: 26px 20px;
display: flex;
flex-direction: column;
justify-content: space-between;
.company-position-list { .company-position-list {
.company-position-item { .company-position-item {
margin-bottom: 24px; margin-bottom: 24px;
...@@ -188,6 +194,7 @@ ...@@ -188,6 +194,7 @@
display: flex; display: flex;
span { span {
padding: 6px 12px; padding: 6px 12px;
height: 24px;
background: #f8f8f8; background: #f8f8f8;
border-radius: 4px; border-radius: 4px;
line-height: 24px; line-height: 24px;
...@@ -195,6 +202,10 @@ ...@@ -195,6 +202,10 @@
font-weight: 400; font-weight: 400;
color: #666666; color: #666666;
margin-right: 8px; margin-right: 8px;
&:first-child {
width: 45%;
text-align: left;
}
} }
} }
} }
......
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
.text-container { .text-container {
position: relative; position: relative;
max-height: calc(3 * 1.3em); /* 3行文本的高度,假设行高为1.2em */ max-height: calc(1 * 1.3em); /* 3行文本的高度,假设行高为1.2em */
overflow: hidden; overflow: hidden;
margin-bottom: 36px; margin-bottom: 36px;
} }
...@@ -102,12 +102,16 @@ ...@@ -102,12 +102,16 @@
cursor: pointer; cursor: pointer;
position: absolute; position: absolute;
right: 0; right: 0;
bottom: -2px; bottom: -4px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-end;
margin-top: 10px; margin-top: 10px;
color: #177cfa; color: #177cfa;
background-color: #ffffff; width: 120px;
padding: 4px 14px 4px 0;
background: linear-gradient(270deg, #fff 65%, rgba(255, 255, 255, 0) 100%);
box-sizing: border-box;
} }
.expanded { .expanded {
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
margin-top: 24px; margin-top: 24px;
.special-item { .special-item {
position: relative; position: relative;
width: calc((100% - 50px) / 3);
flex: 0 0 calc((100% - 50px) / 3); flex: 0 0 calc((100% - 50px) / 3);
margin: 0 25px 25px 0; margin: 0 25px 25px 0;
padding: 12px 12px 24px; padding: 12px 12px 24px;
...@@ -45,6 +46,8 @@ ...@@ -45,6 +46,8 @@
} }
.special-title { .special-title {
display: inline-block;
width: 100%;
height: 18px; height: 18px;
font-size: 18px; font-size: 18px;
font-weight: 400; font-weight: 400;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<div class="special-list"> <div class="special-list">
<div v-for="(item, index) in specialRecruitmentData" :key="index" class="special-item"> <div v-for="(item, index) in specialRecruitmentData" :key="index" class="special-item">
<img :src="baseURL + '/' + item.PICTURE" width="398" height="280" /> <img :src="baseURL + '/' + item.PICTURE" width="398" height="280" />
<div class="special-title">{{ item.FNAME }}</div> <div class="special-title nowrap-ellipsis" :title="item.FNAME">{{ item.FNAME }}</div>
<div class="special-detail">{{ item.FSUBTITLE }}</div> <div class="special-detail">{{ item.FSUBTITLE }}</div>
<div class="flx-justify-between"> <div class="flx-justify-between">
<span v-show="!item.FSTATE" class="special-tag" style="cursor: pointer">进入专题</span> <span v-show="!item.FSTATE" class="special-tag" style="cursor: pointer">进入专题</span>
......
...@@ -183,11 +183,9 @@ ...@@ -183,11 +183,9 @@
.item-lf { .item-lf {
width: 183px; width: 183px;
height: 14px;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
color: #222222; color: #222222;
line-height: 14px;
text-align: left; text-align: left;
} }
.item-rg { .item-rg {
...@@ -245,7 +243,7 @@ ...@@ -245,7 +243,7 @@
.trapezoid { .trapezoid {
position: absolute; position: absolute;
right: -14.1%; right: -14.1%;
top: 22%; top: 21.9%;
width: 29.5%; width: 29.5%;
border-bottom: 30px solid #ffffff; border-bottom: 30px solid #ffffff;
border-left: 17px solid transparent; border-left: 17px solid transparent;
...@@ -254,7 +252,7 @@ ...@@ -254,7 +252,7 @@
.trapezoid1 { .trapezoid1 {
position: absolute; position: absolute;
right: -14.1%; right: -14.1%;
bottom: 22%; bottom: 21.9%;
width: 29.5%; width: 29.5%;
border-top: 30px solid #ffffff; border-top: 30px solid #ffffff;
border-left: 17px solid transparent; border-left: 17px solid transparent;
......
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
</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="baseURL + '/' + item.FLOGO" width="24" height="24px" />
<span style="margin-left: 8px">{{ item.FirmName }}</span> <span style="margin-left: 8px">{{ item.FirmName }}</span>
</div> </div>
<div> <div>
......
...@@ -10,6 +10,7 @@ declare module 'vue' { ...@@ -10,6 +10,7 @@ declare module 'vue' {
Autocomplete: typeof import('./../src/components/autocomplete.vue')['default'] Autocomplete: typeof import('./../src/components/autocomplete.vue')['default']
CommonDetail: typeof import('./../src/components/commonDetail.vue')['default'] CommonDetail: typeof import('./../src/components/commonDetail.vue')['default']
ContentBlock: typeof import('./../src/components/contentBlock.vue')['default'] ContentBlock: typeof import('./../src/components/contentBlock.vue')['default']
CustomPagination: typeof import('./../src/components/customPagination.vue')['default']
CustomSelect: typeof import('./../src/components/customSelect.vue')['default'] CustomSelect: typeof import('./../src/components/customSelect.vue')['default']
DragUpload: typeof import('./../src/components/dragUpload.vue')['default'] DragUpload: typeof import('./../src/components/dragUpload.vue')['default']
ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete'] ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete']
...@@ -22,6 +23,8 @@ declare module 'vue' { ...@@ -22,6 +23,8 @@ declare module 'vue' {
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']
ElCollapse: typeof import('element-plus/es')['ElCollapse']
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElContainer: typeof import('element-plus/es')['ElContainer'] ElContainer: typeof import('element-plus/es')['ElContainer']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
...@@ -45,7 +48,6 @@ declare module 'vue' { ...@@ -45,7 +48,6 @@ declare module 'vue' {
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'] ElPopover: typeof import('element-plus/es')['ElPopover']
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']
ElSelect: typeof import('element-plus/es')['ElSelect'] ElSelect: typeof import('element-plus/es')['ElSelect']
...@@ -55,8 +57,11 @@ declare module 'vue' { ...@@ -55,8 +57,11 @@ declare module 'vue' {
ElUpload: typeof import('element-plus/es')['ElUpload'] ElUpload: typeof import('element-plus/es')['ElUpload']
IEpArrowRight: typeof import('~icons/ep/arrow-right')['default'] IEpArrowRight: typeof import('~icons/ep/arrow-right')['default']
IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default'] IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
IEpCaretLeft: typeof import('~icons/ep/caret-left')['default']
IEpCaretRight: typeof import('~icons/ep/caret-right')['default']
IEpCaretTop: typeof import('~icons/ep/caret-top')['default'] IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
IEpCheck: typeof import('~icons/ep/check')['default'] IEpCheck: typeof import('~icons/ep/check')['default']
IEpCirclePlus: typeof import('~icons/ep/circle-plus')['default']
IEpCirclePlusFilled: typeof import('~icons/ep/circle-plus-filled')['default'] IEpCirclePlusFilled: typeof import('~icons/ep/circle-plus-filled')['default']
IEpDArrowRight: typeof import('~icons/ep/d-arrow-right')['default'] IEpDArrowRight: typeof import('~icons/ep/d-arrow-right')['default']
IEpDeleteFilled: typeof import('~icons/ep/delete-filled')['default'] IEpDeleteFilled: typeof import('~icons/ep/delete-filled')['default']
...@@ -64,7 +69,6 @@ declare module 'vue' { ...@@ -64,7 +69,6 @@ declare module 'vue' {
IEpLocation: typeof import('~icons/ep/location')['default'] IEpLocation: typeof import('~icons/ep/location')['default']
IEpLocationFilled: typeof import('~icons/ep/location-filled')['default'] IEpLocationFilled: typeof import('~icons/ep/location-filled')['default']
IEpMoreFilled: typeof import('~icons/ep/more-filled')['default'] IEpMoreFilled: typeof import('~icons/ep/more-filled')['default']
IEpOfficeBuilding: typeof import('~icons/ep/office-building')['default']
IEpPlus: typeof import('~icons/ep/plus')['default'] IEpPlus: typeof import('~icons/ep/plus')['default']
IEpSearch: typeof import('~icons/ep/search')['default'] IEpSearch: typeof import('~icons/ep/search')['default']
IEpView: typeof import('~icons/ep/view')['default'] IEpView: typeof import('~icons/ep/view')['default']
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论