提交 ca2001b3 authored 作者: 刘旭's avatar 刘旭

西部人力初步上线

上级 155e06ea
// 根目录下新建.vscode/settings.json文件
// settings.json
{
"editor.formatOnType": true,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
"editor.formatOnType": true,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
<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="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
\ No newline at end of file
export const imgUrl =
'https://x0.ifengimg.com/res/2021/D19180EA4230E6F277709FE11A4FE1EA4A5910A1_size646_w2048_h1365.jpeg'
export const imgUrl1 =
'https://img1.baidu.com/it/u=3125581720,366739733&fm=253&fmt=auto&app=138&f=JPEG?w=1080&h=460'
......@@ -117,7 +117,8 @@ const handleCreated = (editor: any) => {
}
const mouseout = () => {
if (!flag.value || valueHtml.value === '<p><br></p>') return
// if (!flag.value || valueHtml.value === '<p><br></p>') return
if (!flag.value) return
// console.log('change', valueHtml.value)
// 存储当前的文件名数组
let newList = [] as string[]
......
<template>
<div v-if="isDual" class="common-box">
<div class="common-content"></div>
<div class="trapezoid"></div>
<span class="common-text" :title="text">{{ text }}</span>
</div>
<div v-else class="common-box dual-common-box">
<div class="common-content dual-common-content"></div>
<div class="trapezoid dual-trapezoid"></div>
<span class="common-text" style="color: #ffffff" :title="text">{{ text }}</span>
</div>
</template>
<script setup lang="ts">
defineProps({
isDual: {
type: Boolean,
default: true
},
text: {
type: String,
default: ''
}
})
</script>
<style lang="scss" scoped>
.common-box {
cursor: pointer;
position: relative;
width: 422px;
height: 200px;
background: #ffffff;
border-radius: 12px;
padding: 16px;
box-sizing: border-box;
.common-content {
width: 390px;
height: 168px;
border-radius: 12px;
border: 1px solid #177cfa;
}
.trapezoid {
position: absolute;
width: 100px;
height: 0;
left: -31px;
bottom: 31px;
border-bottom: 25px solid #a3e4ff;
border-left: 25px solid transparent;
border-right: 25px solid transparent;
transform: rotate(225deg);
}
.common-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #177cfa;
font-size: 30px;
width: 300px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
}
.dual-common-box {
background: #177cfa;
color: #ffffff;
.dual-common-content {
border: 1px solid #ffffff;
}
.dual-trapezoid {
background: linear-gradient(180deg, #a3e4ff 0%, #5b9cff 100%);
}
}
</style>
<template>
<div class="content-container">
<div v-for="(item, index) in list" :key="index" class="content-item" @click="change(item)">
<img :src="baseURL + '/' + item?.FPICTURE" height="238" />
<div class="detail nowrap-ellipsis" :title="item.FTITLE">{{ item.FTITLE }}</div>
<!-- <img :src="baseURL + '/' + item?.FPICTURE" height="238" />
<div class="detail nowrap-ellipsis" :title="item.FTITLE">{{ item.FTITLE }}</div> -->
<commonItem :is-dual="index % 6 < 3" :text="item.FTITLE" />
</div>
</div>
</template>
<script setup lang="ts">
import { baseURL } from '@/services'
// import { baseURL } from '@/services'
import commonItem from '@/components/commonItem.vue'
defineProps({
list: {
......
......@@ -101,6 +101,7 @@ const handleChange = (item: any) => {
font-weight: 400;
display: flex;
align-items: center;
justify-content: space-between;
background-color: #f8f8f8;
color: #222222;
cursor: pointer;
......
......@@ -12,7 +12,8 @@
class="child"
frameborder="0"
:src="
'http://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent('http://192.168.1.168' + url)
// 'http://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent('http://192.168.1.168' + url)
'http://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent('http://14.29.230.199:84' + url)
"
/>
<vue-office-pdf
......
......@@ -6,7 +6,7 @@
class="input-with-select"
@change="handleSearch"
>
<template #prefix>
<!-- <template #prefix>
<el-select v-model="selectValue" placeholder="">
<el-option
v-for="(item, index) in selectOptions"
......@@ -15,7 +15,7 @@
:value="item.value"
/>
</el-select>
</template>
</template> -->
<template #suffix>
<el-icon size="25" style="cursor: pointer" @click="handleSearch"><i-ep-Search /></el-icon>
</template>
......
......@@ -104,6 +104,13 @@ export const getResume = () => {
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeResumeInfoGR,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
)
}
// 查看个人简历
export const getResumeInfo = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeResumeInfo,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 个人用户修改简历信息
export const updateResume = (data: any) => {
return request.post(
......@@ -158,10 +165,46 @@ export const getTalentResume = (data: any) => {
)
}
// 企业人才管理简历查询
// 简历搜索/简历推荐
export const getResumeSearch = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.ResumeSearch,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 简历搜索/简历推荐
export const setTalentPool = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiEditService.CorporateResume,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 简历搜索/简历推荐
export const genCompanyList = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SearchEnterprise,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 用户查看公司详情
export const getCompanyDetail = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.CorporatePosition,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 查看公司职位列表
export const getCompanyPosition = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.EnterpriseJobs,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
// 查看用户期望职位
export const getDesirePosition = () => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.HotJobPage,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
)
}
......@@ -14,10 +14,3 @@ export const getSkillTrainingList = (data: any) => {
data
)
}
export const getPolicyList = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SePolicyNotice,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
......@@ -86,6 +86,7 @@ class RequestHttp {
this.service.interceptors.response.use(
(response: AxiosResponse) => {
const { data, config } = response // 解构
console.log(data, 'response')
const globalStore = useGlobalStore()
const userInfoStore = useUserInfoStore()
if (data.code === 501) {
......@@ -113,10 +114,12 @@ class RequestHttp {
},
(error: AxiosError) => {
const { response } = error
console.log(response, 'response')
// 请求超时 && 网络错误单独判断,没有 response
if (error.message.indexOf('timeout') !== -1) ElMessage.error('请求超时!请您稍后重试')
if (error.message.indexOf('Network Error') !== -1)
ElMessage.error('网络错误!请您稍后重试')
// 根据响应的错误状态码,做不同的处理
if (response) this.handleCode(response.status)
// 服务器结果都没有返回(可能服务器错误可能客户端断网),断网处理:可以跳转到断网页面
......
......@@ -24,7 +24,7 @@
display: flex;
flex-wrap: wrap;
.student-item {
width: calc((100% - 32px) / 3);
cursor: pointer;
flex: 0 0 calc((100% - 32px) / 3);
margin: 0 16px 24px 0;
box-sizing: border-box;
......@@ -62,6 +62,135 @@
font-weight: 400;
color: #000000;
}
.employment-policy {
border-radius: 12px;
background-color: #ffffff;
padding: 20px 24px;
.employment-policy-list {
display: flex;
flex-direction: column;
align-items: start;
font-size: 16px;
.poliy-item {
margin-bottom: 16px;
.poliy-item-order {
display: inline-block;
width: 16px;
height: 14px;
line-height: 14px;
text-align: center;
background: #f8f8f8;
color: #999999;
border-radius: 2px 2px 2px 2px;
font-size: 12px;
font-family: Roboto, Roboto;
font-weight: 400;
margin-right: 4px;
}
.poliy-item-postorder {
background: linear-gradient(90deg, #177cfa 0%, #177cfa 100%);
color: #ffffff;
}
}
}
}
.hot-company {
width: 1316px;
text-align: center;
margin-bottom: 64px;
img {
width: 50px;
height: 50px;
}
.company-list {
display: flex;
flex-wrap: wrap;
margin-top: 24px;
.company-item {
display: flex;
flex-direction: column;
cursor: pointer;
width: calc((100% - 32px) / 3);
flex: 0 0 calc((100% - 32px) / 3);
margin: 0 16px 16px 0;
background: #ffffff;
border-radius: 12px;
box-sizing: border-box;
&:nth-child(3n) {
margin-right: 0;
}
.company-tp {
background: linear-gradient(90deg, #e3f0ff 0%, rgba(227, 240, 255, 0.15) 100%);
border-radius: 12px 12px 0px 0px;
padding: 26px 21px;
display: flex;
.company-tp-rg {
margin-left: 21px;
height: 50px;
}
}
.company-bt {
flex: 1;
padding: 26px 20px;
display: flex;
flex-direction: column;
justify-content: space-between;
.company-position-list {
.company-position-item {
margin-bottom: 24px;
cursor: pointer;
.hot-position-item-ft {
margin-top: 16px;
display: flex;
span {
padding: 6px 12px;
height: 24px;
background: #f8f8f8;
border-radius: 4px;
line-height: 24px;
font-size: 14px;
font-weight: 400;
color: #666666;
margin-right: 8px;
&:first-child {
width: 45%;
text-align: left;
}
}
}
}
}
.company-bt-btn {
width: 100%;
display: flex;
justify-content: center;
cursor: pointer;
span {
display: block;
width: 136px;
height: 38px;
line-height: 38px;
text-align: center;
border-radius: 8px;
border: 1px solid #177cfa;
color: #177cfa;
font-size: 16px;
font-weight: 400;
}
}
}
}
}
}
.live-broadcast {
display: flex;
flex-wrap: wrap;
......
......@@ -41,7 +41,11 @@
</el-input>
</el-form-item>
</el-form>
<el-button type="primary" style="width: 100%; margin-top: 46px" @click="onConfirm"
<el-button
type="primary"
:loading="loading"
style="width: 100%; margin-top: 46px"
@click="onConfirm"
>登录/注册</el-button
>
</div>
......@@ -76,6 +80,7 @@ const props = defineProps({
const emits = defineEmits(['update:show'])
const globalStore = useGlobalStore()
const userInfoStore = useUserInfoStore()
const loading = ref(false)
const formRef = ref()
const state = reactive({
......@@ -140,33 +145,44 @@ const onConfirm = () => {
if (!state.agreeWith) return ElMessage.warning('请先同意授权!')
formRef.value?.validate(async (valid: boolean, fields: any) => {
if (valid) {
const params = {
Phone: state.loginForm.Phone,
Code: state.loginForm.Code,
EnCode: state.EnCode,
Type: state.userType === '个人用户' ? 'GR' : 'QY' // 企业:QY 个人:GR
}
const res: any = await loginSign(params)
if (res.code === 200) {
if (state.userType === '个人用户') {
userInfoStore.setCompanyInfo({})
userInfoStore.setPersonalInfo(res.data)
} else {
userInfoStore.setPersonalInfo({})
userInfoStore.setCompanyInfo(res.data)
try {
loading.value = true
const params = {
Phone: state.loginForm.Phone,
FNAME: state.loginForm.Company,
Code: state.loginForm.Code,
EnCode: state.EnCode,
Type: state.userType === '个人用户' ? 'GR' : 'QY' // 企业:QY 个人:GR
}
const res: any = await loginSign(params)
if (res.code === 200) {
if (state.userType === '个人用户') {
userInfoStore.setCompanyInfo({})
userInfoStore.setPersonalInfo(res.data)
} else {
userInfoStore.setPersonalInfo({})
userInfoStore.setCompanyInfo(res.data)
}
globalStore.setToken(res.data.Token)
handleClose()
ElMessage.success('登录成功')
} else if (res.code === 502) {
router.push({
path: '/recruitmentManagement/editCompany',
query: {
register: 1,
companyName: state.loginForm.Company,
phone: state.loginForm.Phone
}
})
handleClose()
ElMessage.warning(res.msg)
}
globalStore.setToken(res.data.Token)
handleClose()
ElMessage.success('登录成功')
} else if (res.code === 502) {
router.push({
path: '/recruitmentManagement/editCompany',
query: { register: 1, companyName: state.loginForm.Company, phone: state.loginForm.Phone }
})
handleClose()
ElMessage.warning(res.msg)
} catch (error) {
loading.value = false
}
} else {
loading.value = false
console.log('error submit!', fields)
}
})
......
......@@ -13,7 +13,7 @@
height: 62px;
margin-bottom: 24px;
.el-input {
width: 869px;
width: 848px;
height: 62px;
margin-bottom: 24px;
.el-input__wrapper {
......
......@@ -65,7 +65,7 @@ const querySearchAsync = async (queryString: string, cb: (arg: any) => void) =>
FTITLE: searchValue.value
})
if (res.code === 200) {
let results = res.data
let results = res.data || []
clearTimeout(timeout)
timeout = setTimeout(() => {
cb(results)
......
......@@ -8,7 +8,7 @@
<span
v-for="(item, index) in positionList"
:key="index"
:class="positionQuery.FPOSITIONSTATUS === item.type ? 'tag-active' : ''"
:class="queryList.FPOSITIONSTATUS === item.type ? 'tag-active' : ''"
@click="tagChange(item)"
>{{ item.name }}</span
>
......@@ -45,15 +45,14 @@
<span @click="deletePosition(item)">删除</span>
</div>
</div>
<customPagination
:pageSize="queryList.pageSize"
:pageIndex="queryList.pageIndex"
:total="queryList.total"
@current-change="currentChange"
/>
</div>
<el-empty v-else description="暂未添加职位" />
<el-pagination
background
layout="->, prev, pager, next"
:total="total"
hide-on-single-page
style="margin-top: 15px"
/>
</div>
<previewPosition v-model:show="previewShow" :position-item="positionDetailData" />
</template>
......@@ -68,22 +67,28 @@ import {
deleteCompanyPosition
} from '@/services/api/recruitmentManagement'
import previewPosition from './previewPosition.vue'
import customPagination from '@/components/customPagination.vue'
const router = useRouter()
const loading = ref(true)
const previewShow = ref(false)
const total = ref(0)
const positionQuery = ref({
const queryList = ref({
pageIndex: 1,
pageSize: 10,
FPOSITIONSTATUS: '' //A开放,B关闭,空全部
FPOSITIONSTATUS: '', //A开放,B关闭,空全部
total: 0
})
const positionData: any = ref([])
const positionDetailData: any = ref([])
const tagChange = (row: any) => {
positionQuery.value.FPOSITIONSTATUS = row.type
queryList.value.FPOSITIONSTATUS = row.type
initCompanyPositionList()
}
const currentChange = (pageIndex: number) => {
queryList.value.pageIndex = pageIndex
initCompanyPositionList()
}
......@@ -143,18 +148,16 @@ const deletePosition = (row: any) => {
const initCompanyPositionDetail = async (FID: string) => {
const res: any = await getCompanyPositionDetail({ FID })
// console.log(res)
if (res.code === 200) {
positionDetailData.value = res.data
}
}
const initCompanyPositionList = async () => {
loading.value = true
const res: any = await getCompanyPositionList(positionQuery.value)
// console.log(res)
const res: any = await getCompanyPositionList(queryList.value)
if (res.code === 200) {
positionData.value = res.data || []
total.value = res.total
queryList.value.total = res.total
loading.value = false
}
}
......
......@@ -154,6 +154,22 @@
</div>
</div>
</div>
<div v-if="isCompany" class="flx-center">
<span class="btn" @click="talentStatusChange('B')">简历待定</span>
<span class="btn" @click="talentStatusChange('C')">安排面试</span>
<el-dropdown>
<span class="btn">更多</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="talentStatusChange('D')">已面试</el-dropdown-item>
<el-dropdown-item @click="talentStatusChange('E')">已录用</el-dropdown-item>
<el-dropdown-item @click="talentStatusChange('F')">已入职</el-dropdown-item>
<el-dropdown-item @click="talentStatusChange('G')">人才库</el-dropdown-item>
<el-dropdown-item @click="talentStatusChange('H')">人才储备</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</div>
</el-dialog>
......@@ -171,7 +187,7 @@ import { baseURL } from '@/services'
import dayjs from 'dayjs'
import previewFile from '@/components/previewFile.vue'
defineProps({
const props = defineProps({
show: {
type: Boolean,
defualt: false
......@@ -179,10 +195,18 @@ defineProps({
data: {
type: Object,
default: () => {}
},
isCompany: {
type: Boolean,
default: false
},
deliverFID: {
type: String,
default: ''
}
})
const emits = defineEmits(['update:show'])
const emits = defineEmits(['update:show', 'status-change'])
const state = reactive({
previewFileShow: false,
previewTitle: '',
......@@ -196,7 +220,12 @@ const selectDepartRemain = (departRemain: string) => {
return row ? row.label : jobStatus[3].label
}
// 预览简历
const talentStatusChange = async (Type: string) => {
emits('status-change', Type, props.deliverFID)
handleClose()
}
// 预览文件
const openFile = (row: any) => {
state.fileSuffix = row.FATTACHMENTNAME.split('.')[row.FATTACHMENTNAME.split('.').length - 1]
state.fileUrl = baseURL + '/' + row.FFILEIDURL
......@@ -273,6 +302,22 @@ const handleClose = () => {
color: #666666;
}
}
.btn {
display: inline-block;
width: 130px;
height: 40px;
line-height: 40px;
text-align: center;
background: #177cfa;
border-radius: 4px;
opacity: 1;
border: 1px solid rgba(23, 124, 250, 1);
margin-right: 48px;
font-size: 16px;
color: #ffffff;
cursor: pointer;
}
}
pre {
white-space: pre-wrap;
......
......@@ -9,7 +9,7 @@
<div v-if="talentList.length">
<div v-for="col in talentList" :key="col.DeliverFID" class="tab-item">
<div class="tab-item-tp">
<div class="tab-item-tp-lf" @click="openResume">
<div class="tab-item-tp-lf" @click="openResume(col)">
<el-avatar :src="baseURL + '/' + col.FPHOTOS" size="large" />
<div class="user-info">
<div>{{ col.UserName }}</div>
......@@ -79,11 +79,12 @@
<el-divider direction="vertical" />
<span class="user-label">{{ col.FSPECIALTY }}</span>
</div>
<div>
<div v-if="col.FDELIVERYTIME">
<span class="user-label">{{ col.JobName }}</span>
<el-divider direction="vertical" />
<span class="user-label">{{ col.FDELIVERYTIME }}投递</span>
</div>
<span v-else class="user-label">未投递</span>
</div>
</div>
<customPagination
......@@ -96,7 +97,13 @@
<el-empty v-else description="暂无数据" />
</el-tab-pane>
</el-tabs>
<previewResume v-model:show="previewResumeShow" :data="resumeData" />
<previewResume
v-model:show="previewResumeShow"
:data="resumeData"
is-company
:deliverFID="DeliverFID"
@status-change="talentStatusChange"
/>
</template>
<script setup lang="ts">
......@@ -105,7 +112,7 @@ import { recruitStatus, jobStatus } from '../config/index'
import {
getTalentResume,
updateTalentResume,
getResume
getResumeInfo
} from '@/services/api/recruitmentManagement'
import customPagination from '@/components/customPagination.vue'
import previewResume from './previewResume.vue'
......@@ -113,6 +120,7 @@ import previewResume from './previewResume.vue'
const activeName = ref('A')
const loading = ref(true)
const previewResumeShow = ref(false)
const DeliverFID = ref()
// const rateValue = ref(4)
const talentList = ref([] as any)
const resumeData = ref()
......@@ -129,12 +137,12 @@ const selectDepartRemain = (departRemain: string) => {
return row ? row.label : jobStatus[3].label
}
const openResume = async () => {
loading.value = true
const res: any = await getResume()
const openResume = async (row: any) => {
const res: any = await getResumeInfo({ FID: row.VitaeID })
if (res.code === 200) {
resumeData.value = res.data
previewResumeShow.value = true
DeliverFID.value = row.DeliverFID
}
}
......
......@@ -61,3 +61,27 @@ export const jobStatus = [
{ label: '在职考虑中', value: '2' },
{ label: '待业', value: '3' }
]
export const copyList = [
{ width: '50%', prop: 'FCompanyName', label: '公司名称', span: 2 },
{ width: '25%', prop: 'FLegalRepresentative', label: '法定代表人', span: 1 },
{ width: '25%', prop: 'FDateEstablishment', label: '成立日期', span: 1 },
{ width: '50%', prop: 'FRegisteredAddress', label: '注册地址', span: 2 },
{ width: '25%', prop: 'FOperatingState', label: '经营状态', span: 1 },
{ width: '25%', prop: 'FRegisteredCapital', label: '注册资本', span: 1 },
{ width: '50%', prop: 'FTypeEnterprise', label: '企业类型', span: 2 },
{ width: '25%', prop: 'FOperatingTerm', label: '营业期限', span: 1 },
{ width: '25%', prop: 'FAffiliatingArea', label: '所属地区', span: 1 },
{
width: '50%',
prop: 'FCreditCode',
label: '统一社会信用代码',
span: 2
},
{ width: '25%', prop: 'FDateApproval', label: '核准日期', span: 1 },
{ width: '25%', prop: '', label: '', span: 1 },
{ width: '100%', prop: 'FPreviouslyName', label: '曾用名', span: 4 },
{ width: '100%', prop: 'FRegistrationAuthority', label: '登记机关', span: 4 },
{ width: '100%', prop: 'FFIndustryGS', label: '所属行业', span: 4 },
{ width: '100%', prop: 'FBusinessScope', label: '经营范围', span: 4 }
]
......@@ -235,8 +235,8 @@ const state = reactive({
{
FEntryID: 0,
FUserPhoneS: '', //注册手机号
FUserName: '注册人',
FJobTitle: '注册人'
FUserName: '先生/女士',
FJobTitle: '总经理'
}
]
}
......
......@@ -131,6 +131,7 @@
<div class="flx-justify-between">
<div class="resume-label flx-center">期望职位</div>
<div
v-if="!state.resumeData?.Qzdata || state.resumeData?.Qzdata?.length < 3"
class="flx-align-center"
style="color: #177cfa; cursor: pointer"
@click="addExpectedClick"
......@@ -580,7 +581,9 @@ import previewFile from '@/components/previewFile.vue'
import certificate from './components/certificate.vue'
import dayjs from 'dayjs'
const route = useRoute()
const userInfoStore = useUserInfoStore()
const state = reactive({
userInfoShow: false,
personalAdvantagesShow: false,
......@@ -670,6 +673,16 @@ const skillCertificateTag = computed(() => {
return list.length ? list : []
})
const handleScroll = () => {
// let directoryEl: any = document.querySelector('.directory')
// directoryEl.style.top = scrollRef.value?.getBoundingClientRect().top + 'px'
// directoryEl.classList.add('animate')
// if (scrollRef.value?.getBoundingClientRect().top <= 6) {
// directoryEl.style.top = '10px'
// directoryEl.classList.add('animate')
// }
}
const selectDepartRemain = (departRemain: string) => {
let row = jobStatus.find((item: any) => item.value === departRemain)
return row ? row.label : jobStatus[3].label
......@@ -887,6 +900,11 @@ const init = async () => {
loading.value = true
const res: any = await getResume()
if (res.code === 200) {
const { addExpected } = route.query
if (addExpected && res.data?.Qzdata?.length < 3) {
state.resumeActive = '期望职位'
state.expectedPositionShow = true
}
state.resumeData = res.data
loading.value = false
}
......@@ -913,7 +931,17 @@ const initInformation = async () => {
}
}
initInformation()
onMounted(() => {
window.addEventListener('scroll', handleScroll, true)
})
onBeforeUnmount(() => {
window.removeEventListener('scroll', handleScroll)
})
onMounted(() => {
initInformation()
})
</script>
<style lang="scss" scoped>
......
......@@ -52,8 +52,8 @@
</div>
<talent v-if="manageActive === '人才管理'" ref="talentRef" />
<position v-else-if="manageActive === '职位管理'" ref="positionRef" />
<resume v-else-if="manageActive === '简历搜索'" />
<resume v-else :filterShow="false" />
<resume v-else-if="manageActive === '简历搜索'" ref="resumeRef" />
<resume v-else ref="resumeRef" :filter-show="false" />
</div>
</div>
</template>
......@@ -72,6 +72,7 @@ const globalStore = useGlobalStore()
const manageActive = ref('人才管理')
const talentRef = ref()
const positionRef = ref()
const resumeRef = ref()
const manageList = [
{ name: '人才管理', type: 'A' },
......@@ -119,10 +120,10 @@ watch(
case '职位管理':
positionRef.value?.initCompanyPositionList()
break
case '简历搜索':
break
// case '简历搜索':
// break
default:
resumeRef.value?.init()
break
}
}, 100)
......
......@@ -103,7 +103,7 @@
</div>
</div>
<el-divider style="margin: 14px 0" />
<div>
<div @click="toCompanyDetail(col.firmfid)">
<div class="company">{{ col.firmname }}</div>
<div class="company-label">
<span>{{ col.ffinancings }}</span>
......@@ -175,12 +175,12 @@
</div>
</div>
<div v-if="item.JobS && item.JobS?.length" class="company-bt-btn">
<span>查看更多职位</span>
<span @click="toCompanyDetail(item.FirmFID)">查看更多职位</span>
</div>
</div>
</div>
</div>
<span class="n-more" style="margin-top: 8px">查看更多</span>
<span class="n-more" style="margin-top: 8px" @click="toSeeMoreCompany">查看更多</span>
</div>
</div>
</template>
......@@ -197,7 +197,6 @@ import { getStreet } from '@/services/api/streetOfficeSpecialTopic'
import { getPoster } from '@/services/api/common'
import { useUserInfoStore } from '@/stores/modules/userInfo'
import autocomplete from '@/components/autocomplete.vue'
import seeMorePosition from './seeMorePosition.vue'
const router = useRouter()
const userInfoStore = useUserInfoStore()
......@@ -259,6 +258,10 @@ const toSeeMorePosition = () => {
router.push({ path: '/recruitmentManagement/seeMorePosition' })
}
const toSeeMoreCompany = () => {
router.push({ path: '/recruitmentManagement/seeMoreCompany' })
}
const subMenuList = computed(() => {
if (!FDATAVALUE.value) return []
const list = JSON.parse(JSON.stringify(menuList.value)) || []
......
......@@ -41,14 +41,9 @@
</div>
</div>
<div v-if="userPostionList.length" v-loading="filterLoading" class="personal-contnet">
<div
v-for="item in userPostionList"
:key="item"
class="personal-ct-item"
@click="toPositionDetail(item.FID)"
>
<div v-for="item in userPostionList" :key="item" class="personal-ct-item">
<div class="personal-ct-item-tp">
<div class="personal-ct-item-tp-lf">
<div class="personal-ct-item-tp-lf" @click="toPositionDetail(item.FID)">
<div
:title="
item.JobName + [item.FWORKPLACE?.replace(/^.*?\//, '').replace(/\//g, '.')]
......@@ -68,7 +63,7 @@
<span class="info-label">{{ item.FEDUCATIONALBACKGROUND }}</span>
</div>
</div>
<div class="personal-ct-item-tp-ct">
<div class="personal-ct-item-tp-ct" @click="toCompanyDetail(item.FirmID)">
<img
:src="baseURL + '/' + item.FLOGO"
width="54"
......@@ -218,6 +213,10 @@ const toPositionDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/positionDetail', query: { FID } })
}
const toCompanyDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/companyDetail', query: { FID } })
}
const initUserPostionList = async () => {
filterLoading.value = true
let params = JSON.parse(JSON.stringify(queryList.value))
......
......@@ -144,6 +144,7 @@
<script setup lang="ts">
import { getUserPostionDetail, sendResume } from '@/services/api/recruitmentManagement'
import { baseURL } from '@/services'
import { copyList } from './config'
import info from './components/info.vue'
import qqMap from '@/components/qqMap.vue'
......@@ -151,30 +152,6 @@ const route = useRoute()
const list: any = ref([])
const copyList = [
{ width: '50%', prop: 'FCompanyName', label: '公司名称', span: 2 },
{ width: '25%', prop: 'FLegalRepresentative', label: '法定代表人', span: 1 },
{ width: '25%', prop: 'FDateEstablishment', label: '成立日期', span: 1 },
{ width: '50%', prop: 'FRegisteredAddress', label: '注册地址', span: 2 },
{ width: '25%', prop: 'FOperatingState', label: '经营状态', span: 1 },
{ width: '25%', prop: 'FRegisteredCapital', label: '注册资本', span: 1 },
{ width: '50%', prop: 'FTypeEnterprise', label: '企业类型', span: 2 },
{ width: '25%', prop: 'FOperatingTerm', label: '营业期限', span: 1 },
{ width: '25%', prop: 'FAffiliatingArea', label: '所属地区', span: 1 },
{
width: '50%',
prop: 'FCreditCode',
label: '统一社会信用代码',
span: 2
},
{ width: '25%', prop: 'FDateApproval', label: '核准日期', span: 1 },
{ width: '25%', prop: '', label: '', span: 1 },
{ width: '100%', prop: 'FPreviouslyName', label: '曾用名', span: 4 },
{ width: '100%', prop: 'FRegistrationAuthority', label: '登记机关', span: 4 },
{ width: '100%', prop: 'FFIndustryGS', label: '所属行业', span: 4 },
{ width: '100%', prop: 'FBusinessScope', label: '经营范围', span: 4 }
]
const loading = ref(true)
const mapRef: any = ref()
const detailData: any = ref()
......@@ -225,7 +202,9 @@ const init = async () => {
const res: any = await getUserPostionDetail({ FID: route.query.FID })
if (res.code === 200) {
detailData.value = res.data
console.log(detailData.value?.FWORKPLACE)
mapRef.value.initMap(detailData.value?.FWORKPLACE)
loading.value = false
}
}
......
<template>
<div></div>
<div class="see-more-company">
<div class="container">
<div class="filter">
<div class="filter-list">
<div v-for="(item, index) in filterList" :key="index" class="filter-item">
<div class="filter-label">{{ item.name }}</div>
<div class="filter-span">
<span
v-for="col in item.list"
:key="col.FENTRYID"
:style="{ color: col.FENTRYID === queryList.Filter[item.prop] ? '#177cfa' : '' }"
@click="filterChange(item.prop, col.FENTRYID)"
>{{ col.FDATAVALUE }}</span
>
</div>
</div>
</div>
<div class="filter-clear">
<span @click="clear">清空筛选条件</span>
</div>
<el-autocomplete
v-model="queryList.Filter.FNAME"
value-key="FirmName"
:fetch-suggestions="querySearchAsync"
placeholder="搜索公司"
@select="search"
@change="search"
>
<template #prefix>
<span style="padding-right: 28px">找企业</span>
</template>
<template #suffix>
<el-icon size="24" style="cursor: pointer" @click="querySearchAsync"
><i-ep-Search
/></el-icon>
</template>
</el-autocomplete>
</div>
<div v-if="companyList.length" v-loading="loading" class="company-content">
<div class="company-list">
<div v-for="item in companyList" :key="item.FirmFID" class="company-item">
<div class="company-tp" @click="toCompanyDetail(item.FirmFID)">
<img :src="baseURL + '/' + item.FLOGO" width="50" height="50" />
<div class="company-tp-rg flx-column-start-between">
<span>{{ item.FirmName }}</span>
<div class="company-label">
<span>{{ item.FFINANCINGS }}</span>
<el-divider direction="vertical" />
<span>{{ item.FSCALES }}</span>
<el-divider direction="vertical" />
<span>{{ item.FINDUSTRY }}</span>
</div>
</div>
</div>
<div class="company-bt">
<div class="company-position-list flx-direction-column">
<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="nowrap-ellipsis"
style="width: 207px; text-align: left"
:title="col.JobName"
>
{{ col.JobName }}
</div>
<div>
<span class="salary">{{ col.FMINIMUMWAGE }}-{{ col.FMAXIMUMSALARY }}</span>
<span class="monthly-pay">元/月</span>
</div>
</div>
<div class="hot-position-item-ft">
<span class="nowrap-ellipsis" :title="col.FWORKPLACE">{{
`${col.FWORKPLACE.split('/')[1]} ${col.FWORKPLACE.split('/')[2]} ${
col.FWORKPLACE.split('/')[3]
}`
}}</span>
<span>{{ col.FEXPERIENCE }} </span>
<span>{{ col.FEDUCATIONALBACKGROUND }}</span>
</div>
</div>
</div>
<div v-if="item.JobS && item.JobS?.length" class="company-bt-btn">
<span @click="toSeeMorePosition">查看更多职位</span>
</div>
</div>
</div>
</div>
<customPagination
:pageSize="queryList.pageSize"
:pageIndex="queryList.pageIndex"
:total="queryList.total"
@current-change="currentChange"
/>
</div>
<el-empty v-else description="暂无数据" />
</div>
</div>
</template>
<script setup lang="ts"></script>
<script setup lang="ts">
import { getInformation } from '@/services/api/common'
import { getStreet } from '@/services/api/streetOfficeSpecialTopic'
import { genCompanyList } from '@/services/api/recruitmentManagement'
import { baseURL } from '@/services'
import customPagination from '@/components/customPagination.vue'
const router = useRouter()
const queryList = ref({
pageIndex: 1,
pageSize: 12,
Filter: {
FNAME: '', //名称
FSUBSTREET: '', //街道
FINDUSTRY: '', //公司类型
FSCALES: '', //公司规模
FFINANCINGS: '' //融资情况
} as any,
total: 0
})
const filterList: any = ref([
{
name: '公司类型',
prop: 'FINDUSTRY',
list: []
},
{
name: '所在街道办',
list: [],
prop: 'FSUBSTREET'
},
{
name: '公司规模',
list: [],
prop: 'FSCALES'
},
{
name: '融资情况',
list: [],
prop: 'FFINANCINGS'
}
])
const loading = ref(true)
const informationData = ref()
const companyList: any = ref([])
let timeout: ReturnType<typeof setTimeout>
const filterChange = (prop: string, FENTRYID: string) => {
queryList.value.Filter[prop] = FENTRYID
initCompanyList()
}
const currentChange = (pageIndex: number) => {
queryList.value.pageIndex = pageIndex
initCompanyList()
window.scrollTo({
top: 0,
behavior: 'auto' // 可选,smooth 平滑滚动效果
})
}
const toCompanyDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/companyDetail', query: { FID } })
}
const toSeeMorePosition = () => {
router.push({ path: '/recruitmentManagement/seeMorePosition' })
}
const toPositionDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/positionDetail', query: { FID } })
}
const search = (item: Record<string, any>) => {
initCompanyList()
}
const clear = () => {
queryList.value.Filter.FINDUSTRY = ''
queryList.value.Filter.FSCALES = ''
queryList.value.Filter.FSUBSTREET = ''
queryList.value.Filter.FFINANCINGS = ''
initCompanyList()
}
const querySearchAsync = async (queryString: string, cb: (arg: any) => void) => {
const res: any = await genCompanyList({
pageIndex: 1,
pageSize: 10,
Filter: {
FNAME: queryList.value.Filter.FNAME //名称
}
})
if (res.code === 200) {
let results = res.data || []
clearTimeout(timeout)
timeout = setTimeout(() => {
cb(results)
}, 300)
}
}
const initCompanyList = async () => {
loading.value = true
const res: any = await genCompanyList(queryList.value)
if (res.code === 200) {
companyList.value = res.data || []
queryList.value.total = res.total
loading.value = false
}
}
const init = async () => {
const res: any = await getInformation({
AuxiliaryS: ['Trade', 'Member', 'Financing']
})
if (res.code === 200) {
informationData.value = res.data
const item = { FDATAVALUE: '不限', FENTRYID: '' }
res.data.Trade.unshift(item)
res.data.Member.unshift(item)
res.data.Financing.unshift(item)
filterList.value[0].list = res.data?.Trade || []
filterList.value[2].list = res.data?.Member || []
filterList.value[3].list = res.data?.Financing || []
const street: any = await getStreet()
if (street.code === 200) {
street.data?.forEach((item: any) => {
item.FDATAVALUE = item.FNAME + '办'
item.FENTRYID = item.FID
})
const item = { FDATAVALUE: '全部', FENTRYID: '' }
street.data.unshift(item)
filterList.value[1].list = street.data || []
initCompanyList()
}
}
}
init()
</script>
<style lang="scss" scoped></style>
<style lang="scss" scoped>
@import url(./style/seeMoreCompany.scss);
</style>
......@@ -3,13 +3,31 @@
<div class="container">
<div class="sell-position">
<div class="flx-align-center">
<span class="desc-title">推荐职位</span>
<span
class="desc-title"
:style="{ color: queryList.Filter.FNAME === '' ? '#177cfa' : '' }"
@click="selectChange('')"
>推荐职位</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">
<div
v-for="(item, index) in expectedPositionList"
:key="item.FDESIREDPOSITION"
class="expected-position"
:style="{
borderRight: expectedPositionList.length - 1 === index ? 0 : '',
color: queryList.Filter.FNAME === item.FDATAVALUE ? '#177cfa' : ''
}"
@click="selectChange(item.FDATAVALUE)"
>
{{ item.FDATAVALUE }}
</div>
<div
v-show="expectedPositionList.length > 3"
class="flx-align-center"
style="padding-left: 24px; border-left: 1px solid #cccccc"
@click="toEditResume"
>
<el-icon style="margin: 3px 4px 0 0"><i-ep-CirclePlus /></el-icon>
<span>添加求职期望</span>
</div>
......@@ -22,23 +40,33 @@
v-model="queryList.Filter[item.prop]"
:name="item.name"
:list="item.list"
@change="selectChange($event, index)"
@change="selectChange"
/>
</div>
</div>
<morePosition ref="morePositionRef" />
<morePosition
v-if="positionList.length"
ref="morePositionRef"
v-loading="loading"
:positionList="positionList"
:queryList="queryList"
isPositon
@current-change="currentChange"
/>
<el-empty v-else description="暂无数据" />
</div>
</div>
</template>
<script setup lang="ts">
import { getInformation } from '@/services/api/common'
import { getDesirePosition, getUserPostionList } from '@/services/api/recruitmentManagement'
import morePosition from './components/morePosition.vue'
import customSelect from '@/components/customSelect.vue'
const router = useRouter()
const queryList = ref({
pageIndex: 1,
pageSize: 10,
pageSize: 6,
Filter: {
//传id
FNAME: '', //标题
......@@ -48,7 +76,8 @@ const queryList = ref({
FEDUCATIONALBACKGROUND: '', //学历
FSCALES: '', //规模
FFINANCINGS: '' //融资情况
} as any
} as any,
total: 0
})
const filterList = ref([
......@@ -68,44 +97,72 @@ const filterList = ref([
prop: 'FEDUCATIONALBACKGROUND'
},
{
name: '公司规模',
name: '公司类型',
list: [],
prop: 'FSCALES'
prop: 'FINDUSTRY'
},
{
name: '融资情况',
name: '公司规模',
list: [],
prop: 'FFINANCINGS'
prop: 'FSCALES'
}
])
const positionList = ref([] as any)
const morePositionRef = ref()
const informationData = ref()
const loading = ref(true)
const expectedPositionList = ref([] as any)
const selectChange = (FName?: string) => {
if (FName) queryList.value.Filter.FNAME = FName
else queryList.value.Filter.FNAME = ''
initUserPostionList()
}
const selectChange = (e: any, index: number) => {}
const currentChange = (pageIndex: number) => {
queryList.value.pageIndex = pageIndex
initUserPostionList()
}
const toEditResume = () => {
router.push({ path: '/recruitmentManagement/editResume', query: { addExpected: 'true' } })
}
const initUserPostionList = async () => {
loading.value = true
const res: any = await getUserPostionList(queryList.value)
if (res.code === 200) {
positionList.value = res.data || []
queryList.value.total = res.total
loading.value = false
}
}
const init = async () => {
const res: any = await getInformation({
AuxiliaryS: ['Experience', 'SalaryRange', 'Degree2', 'Member', 'Financing']
})
const initDesirePosition = async () => {
const res: any = await getDesirePosition()
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()
const { FzData, QwDat } = await res.data
informationData.value = res.data?.FzData
expectedPositionList.value = QwDat || []
const item = { FDATAVALUE: '不限', FDESCRIPTION: '不限', FENTRYID: '' }
FzData.Experience.push(item)
FzData.SalaryRange.push(item)
FzData.Degree2.push(item)
FzData.Member.push(item)
filterList.value[0].list = FzData.Experience
filterList.value[1].list = FzData.SalaryRange
filterList.value[2].list = FzData.Degree2
filterList.value[3].list = FzData.Trade
filterList.value[4].list = FzData.Member
initUserPostionList()
loading.value = false
morePositionRef.value?.init()
}
}
onMounted(() => {
init()
initDesirePosition()
})
</script>
......@@ -126,10 +183,15 @@ onMounted(() => {
}
.desc-title {
cursor: pointer;
display: inline-block;
font-size: 18px;
color: #000000;
margin-right: 40px;
margin-right: 16px;
}
.expected-position {
padding: 0 24px;
border-right: 1px solid #cccccc;
}
.select-list {
display: flex;
......
......@@ -152,6 +152,10 @@
font-weight: 400;
color: #222222;
margin-bottom: 8px;
&:hover {
color: #177cfa;
}
}
}
.select-list {
......
......@@ -16,7 +16,7 @@
background: #ffffff;
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
border-radius: 12px;
margin-right: 15px;
// margin-right: 15px;
transition: top 0.4s ease-in-out;
.directory-first {
height: 46px;
......@@ -60,6 +60,7 @@
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
border-radius: 12px;
font-weight: 400;
// margin-left: 242px;
.resume-header {
height: 46px;
......
......@@ -80,7 +80,7 @@
font-weight: 400;
color: #999999;
line-height: 14px;
margin-top: 16px;
margin-top: 8px;
display: flex;
align-items: center;
}
......@@ -88,7 +88,7 @@
.company-detail {
width: 391px;
height: 243px;
font-size: 12px;
font-size: 14px;
font-weight: 400;
color: #666666;
margin: 24px 0 20px;
......
.see-more-company {
display: flex;
justify-content: center;
margin: 24px;
.container {
width: 1316px;
color: #222222;
.filter {
padding: 24px 36px;
background: #ffffff;
border-radius: 8px;
.filter-list {
margin-bottom: 24px;
.filter-item {
display: flex;
margin-bottom: 8px;
.filter-label {
width: 80px;
height: 24px;
font-size: 16px;
font-weight: 400;
color: #222222;
margin: 0 24px 8px 0;
}
.filter-span {
flex: 1;
display: flex;
flex-wrap: wrap;
span {
font-size: 14px;
color: #666666;
margin: 0 24px 8px 0;
cursor: pointer;
&:hover {
color: #177cfa;
}
}
}
}
}
.filter-clear {
display: flex;
justify-content: flex-end;
font-size: 14px;
color: #666666;
margin-right: 24px;
span {
cursor: pointer;
&:hover {
color: #177cfa;
}
}
}
}
.company-content {
width: 1316px;
text-align: center;
margin-bottom: 64px;
.company-list {
display: flex;
flex-wrap: wrap;
margin-top: 24px;
.company-item {
display: flex;
flex-direction: column;
cursor: pointer;
width: calc((100% - 32px) / 3);
flex: 0 0 calc((100% - 32px) / 3);
margin: 0 16px 16px 0;
background: #ffffff;
border-radius: 12px;
box-sizing: border-box;
&:nth-child(3n) {
margin-right: 0;
}
.company-tp {
background: linear-gradient(90deg, #e3f0ff 0%, rgba(227, 240, 255, 0.15) 100%);
border-radius: 12px 12px 0px 0px;
padding: 26px 21px;
display: flex;
.company-tp-rg {
margin-left: 21px;
height: 50px;
}
}
.company-bt {
flex: 1;
padding: 26px 20px;
display: flex;
flex-direction: column;
justify-content: space-between;
.company-position-list {
.company-position-item {
margin-bottom: 24px;
cursor: pointer;
.hot-position-item-ft {
margin-top: 16px;
display: flex;
span {
padding: 6px 12px;
height: 24px;
background: #f8f8f8;
border-radius: 4px;
line-height: 24px;
font-size: 14px;
font-weight: 400;
color: #666666;
margin-right: 8px;
&:first-child {
width: 45%;
text-align: left;
}
}
}
}
}
.company-bt-btn {
width: 100%;
display: flex;
justify-content: center;
cursor: pointer;
span {
display: block;
width: 136px;
height: 38px;
line-height: 38px;
text-align: center;
border-radius: 8px;
border: 1px solid #177cfa;
color: #177cfa;
font-size: 16px;
font-weight: 400;
}
}
}
}
}
}
}
:deep(.el-autocomplete) {
width: 869px;
height: 62px;
margin-bottom: 24px;
.el-input {
width: 869px;
height: 62px;
margin-bottom: 24px;
.el-input__wrapper {
border-radius: 29px;
padding: 0 45px;
}
}
.el-input__prefix-inner {
border-right: 1px solid #ccc;
margin-right: 24px;
}
}
}
......@@ -90,7 +90,7 @@
:key="item"
class="hot-position-item enterprise"
>
<div class="enterprise-tp" @click="toPositionDetail(item.JobName)">
<div class="enterprise-tp" @click="toPositionDetail(item.JobFID)">
<div class="flx-justify-between">
<div class="item-lf nowrap-ellipsis" :title="item.JobName">
{{ item.JobName }}
......@@ -107,9 +107,9 @@
<span>{{ item.FEDUCATIONALBACKGROUND }}</span>
</div>
</div>
<div class="enterprise-bt flx-justify-between">
<div class="enterprise-bt flx-justify-between" @click="toCompanyDetail(item.FirmFID)">
<div class="flx-align-center">
<img :src="baseURL + '/' + item.FLOGO" width="24" height="24px" />
<img :src="baseURL + '/' + item.FLOGO" width="24" height="24" />
<span style="margin-left: 8px">{{ item.FirmName }}</span>
</div>
<div>
......@@ -184,6 +184,10 @@ const toPersonal = () => {
router.push({ path: '/recruitmentManagement/personal', query: { street: streetActive.value } })
}
const toCompanyDetail = (FID: number) => {
router.push({ path: '/recruitmentManagement/companyDetail', query: { FID } })
}
const change = (FID: string) => {
streetActive.value = FID
initStreetPosition()
......
......@@ -9,6 +9,7 @@ declare module 'vue' {
export interface GlobalComponents {
Autocomplete: typeof import('./../src/components/autocomplete.vue')['default']
CommonDetail: typeof import('./../src/components/commonDetail.vue')['default']
CommonItem: typeof import('./../src/components/commonItem.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']
......@@ -23,8 +24,6 @@ declare module 'vue' {
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
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']
ElContainer: typeof import('element-plus/es')['ElContainer']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
......@@ -46,7 +45,6 @@ declare module 'vue' {
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
......
......@@ -75,7 +75,8 @@ export default defineConfig({
// 设置代理
proxy: {
'/K3Cloud': {
target: 'http://192.168.1.168',
// target: 'http://192.168.1.168',
target: 'http://14.29.230.199:84/',
changeOrigin: true
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论