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

同步代码

上级 6f0bba7e
<template>
<div class="main-container">
<div class="search-group">
<el-input v-model="searchValue" placeholder="请输入搜索关键字" class="input-with-select">
<template #prepend>
<el-select v-model="selectValue" placeholder="Select" style="width: 115px">
<el-option label="找工作" value="1" />
<el-option label="找企业" value="2" />
<el-option label="找人才" value="3" />
</el-select>
</template>
<template #append>
<el-button :icon="Search" />
</template>
</el-input>
</div>
<div class="banner-group">
<div class="job-menu">
<el-menu class="el-menu-vertical-demo">
<el-menu-item
v-for="item in menuList"
:key="item.index"
@mouseover="mouseover(item)"
@mouseout="mouseout(item)"
>
<template #title>
<div class="menu-item-title">
<span>{{ item.name }}</span>
<el-icon><i-ep-ArrowRight /></el-icon>
</div>
</template>
</el-menu-item>
</el-menu>
<div class="job-menu-sub" @mouseover="mouseover" @mouseout="mouseout">
<el-scrollbar height="400px">
<el-descriptions v-for="item in 10" :key="item" :column="4">
<template #title>
<div style="font-size: 14px; font-weight: 400">销售</div>
</template>
<el-descriptions-item>
<template #default>
<el-link :underline="false">销售业务</el-link>
</template>
</el-descriptions-item>
<el-descriptions-item>
<template #default>
<el-link :underline="false">销售业务</el-link>
</template>
</el-descriptions-item>
<el-descriptions-item>
<template #default>
<el-link :underline="false">销售业务</el-link>
</template>
</el-descriptions-item>
<el-descriptions-item>
<template #default>
<el-link :underline="false">销售业务</el-link>
</template>
</el-descriptions-item>
<el-descriptions-item>
<template #default>
<el-link :underline="false">销售业务</el-link>
</template>
</el-descriptions-item>
</el-descriptions>
</el-scrollbar>
</div>
</div>
<div class="banner-main">
<el-carousel height="410px">
<el-carousel-item v-for="item in 4" :key="item">
<el-image
style="width: 100%; height: 100%"
src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"
/>
</el-carousel-item>
</el-carousel>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { Search } from '@element-plus/icons-vue'
const searchValue = ref()
const selectValue = ref()
const menuList = [
{
index: 0,
name: '销售|客服|采购|淘宝'
},
{
index: 1,
name: '人力|行政|管理'
},
{
index: 2,
name: '网络|通信|电子|电气'
},
{
index: 3,
name: '市场|媒介|广告|设计'
},
{
index: 4,
name: '生产| 物流|质控|汽车'
},
{
index: 5,
name: '生活| 服务业|超市|百货'
},
{
index: 6,
name: '法律|教育|翻译|出版'
},
{
index: 7,
name: '财会 | 金融 | 保险'
},
{
index: 8,
name: '医疗 | 制药 | 环保'
}
]
const mouseover = (row?: any) => {
const jobMenuJob: any = document.querySelector('.job-menu-sub')
jobMenuJob.style.display = 'block'
}
const mouseout = (row?: any) => {
const jobMenuJob: any = document.querySelector('.job-menu-sub')
jobMenuJob.style.display = 'none'
}
</script>
<style lang="scss" scoped>
.main-container {
display: flex;
flex-direction: column;
align-items: center;
// overflow: hidden;
.search-group {
width: 920px;
border-radius: 20px;
margin: 40px 0;
.el-input {
height: 100%;
:deep(.el-input__wrapper) {
height: 60px;
}
}
}
.banner-group {
height: 424px;
display: flex;
.job-menu {
width: 238px;
height: 410px;
position: relative;
padding: 16px 0;
background-color: #ffffff;
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
box-sizing: border-box;
// background: rgba(79, 90, 102, 0.6);
.el-menu {
border-right: 0;
// background: transparent;
.menu-item-title {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.el-menu-item {
// color: #ffffff !important;
height: 42px;
}
}
.job-menu-sub {
display: none;
position: absolute;
top: 0;
left: 238px;
z-index: 10;
width: 700px;
height: 410px;
background: #fff;
.el-scrollbar {
padding: 16px 23px 0 24px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
:deep(.el-descriptions__label) {
margin-right: 0;
}
}
}
.banner-main {
width: 700px;
height: 410px;
}
}
}
:deep(.input-with-select .el-input-group__prepend) {
background-color: #ffffff;
}
</style>
......@@ -19,8 +19,10 @@
class="dropdown-item flx-justify-between"
@click="handleChange(item)"
>
<span :style="{ color: item.value === modelValue ? '#177CFA' : '' }">{{ item.label }}</span>
<el-icon color="#177CFA"><i-ep-Check v-show="item.value === modelValue" /></el-icon>
<span :style="{ color: item.FNUMBER === modelValue ? '#177CFA' : '' }">{{
item.FDATAVALUE
}}</span>
<el-icon color="#177CFA"><i-ep-Check v-show="item.FNUMBER === modelValue" /></el-icon>
</div>
</div>
</div>
......@@ -79,9 +81,9 @@ const mouseleave = () => {
const handleChange = (item: any) => {
dropdownRef.value.style.display = 'none'
if (item.value === props.modelValue) return emits('update:modelValue', '')
emits('update:modelValue', item.value)
emits('change', item.value)
if (item.FNUMBER === props.modelValue) return emits('update:modelValue', '')
emits('update:modelValue', item.FNUMBER)
emits('change', item.FNUMBER)
}
</script>
......
......@@ -47,6 +47,8 @@ const handleSearch = () => {
// console.log(searchValue.value)
emits('searchChange', searchValue.value)
}
defineExpose({ searchValue })
</script>
<style lang="scss" scoped>
......
......@@ -40,6 +40,10 @@ const routes = [
component: () => import('@/views/recruitmentManagement/addAdministrator.vue')
},
{
path: '/recruitmentManagement/editPosition',
component: () => import('@/views/recruitmentManagement/editPosition.vue')
},
{
path: '/specialRecruitment',
component: () => import('@/views/specialRecruitment/index.vue')
},
......
......@@ -21,3 +21,11 @@ export const getCommonDetail = (data: any) => {
data
)
}
// 辅助资料
export const getInformation = (data: any) => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeAuxiliaryData,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc',
data
)
}
import request from '@/services'
export const getPosition = () => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SePositionInfo,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
)
}
import request from '@/services'
// 街道办资料
export const getStreet = () => {
return request.post(
'/LQKJ.K3.NSJYBSystem.WebApi.WebApiService.SeStreet,LQKJ.K3.NSJYBSystem.WebApi.common.kdsvc'
)
}
......@@ -14,17 +14,24 @@
</div>
</div>
<el-form ref="formRef" :model="state.loginForm" :rules="state.loginRules" label-width="0">
<el-form-item v-if="state.userType === '企业用户'" label="" prop="Company">
<el-input v-model="state.loginForm.Company" size="large" placeholder="请输入公司名称">
<template #prefix>
<img src="../../assets/img/company.png" />
</template>
</el-input>
</el-form-item>
<el-form-item label="" prop="Phone">
<el-input v-model="state.loginForm.Phone" size="large" placeholder="请输入手机号">
<template #prefix>
<img src="../../assets/img/Phone.png" alt="" />
<img src="../../assets/img/Phone.png" />
</template>
</el-input>
</el-form-item>
<el-form-item label="" prop="Code">
<el-input v-model="state.loginForm.Code" size="large" placeholder="请输入验证码">
<template #prefix>
<img src="../../assets/img/pwd.png" alt="" />
<img src="../../assets/img/pwd.png" />
</template>
<template #suffix>
<el-button type="primary" link :disabled="state.sended" @click="sendCode">{{
......@@ -74,7 +81,8 @@ const state = reactive({
userType: '个人用户',
loginForm: {
Phone: '18874693873',
Code: '3123'
Code: '3123',
Company: '货拉拉公司'
},
loginRules: {
Phone: [
......@@ -85,7 +93,8 @@ const state = reactive({
trigger: 'blur'
}
],
Code: [{ required: true, message: '请输入验证码', trigger: 'blur' }]
Code: [{ required: true, message: '请输入验证码', trigger: 'blur' }],
Company: [{ required: true, message: '请输入公司名称', trigger: 'blur' }]
},
agreeWith: false,
sended: false,
......
<template>
<div class="main-container">
<search />
<div class="banner-group">
<div class="job-menu">
<el-menu class="el-menu-vertical-demo">
<el-menu-item
v-for="item in menuList"
:key="item.index"
@mouseover="mouseover(item)"
@mouseout="mouseout(item)"
>
<template #title>
<div class="menu-item-title">
<span>{{ item.name }}</span>
<el-icon><i-ep-ArrowRight /></el-icon>
</div>
</template>
</el-menu-item>
</el-menu>
<div class="job-menu-sub" @mouseover="mouseover" @mouseout="mouseout">
<el-scrollbar height="400px">
<el-descriptions v-for="item in 10" :key="item" :column="4">
<template #title>
<div style="font-size: 14px; font-weight: 400">销售</div>
</template>
<el-descriptions-item v-for="item1 in 4" :key="item1">
<template #default>
<el-link :underline="false" href="/job">销售业务</el-link>
</template>
</el-descriptions-item>
</el-descriptions>
</el-scrollbar>
</div>
</div>
<div class="banner-main">
<el-carousel height="410px">
<el-carousel-item v-for="item in 4" :key="item">
<el-image
style="width: 100%; height: 100%"
src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"
/>
</el-carousel-item>
</el-carousel>
</div>
<div class="home-login">
<div class="login">
<el-avatar
:size="60"
:icon="UserFilled"
src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png"
/>
<text>Hi!欢迎登录!</text>
<div class="login-btn">
<el-button type="primary">登录</el-button>
<el-button>注册</el-button>
</div>
</div>
<div class="headlines">
<div class="news-group">
<h2>政策公告</h2>
<text>更多&nbsp;>></text>
</div>
<el-scrollbar height="152px">
<el-link
v-for="item in 10"
:key="item"
title="关于协助做好2022年农村电商“省级精英训练营”宣传发动有关工作的通知"
>关于协助做好2022年农村电商“省级精英训练营”宣传发动有关工作的通知</el-link
>
</el-scrollbar>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { UserFilled } from '@element-plus/icons-vue'
import search from '@/components/search.vue'
const menuList = [
{
index: 0,
name: '销售|客服|采购|淘宝'
},
{
index: 1,
name: '人力|行政|管理'
},
{
index: 2,
name: '网络|通信|电子|电气'
},
{
index: 3,
name: '市场|媒介|广告|设计'
},
{
index: 4,
name: '生产| 物流|质控|汽车'
},
{
index: 5,
name: '生活| 服务业|超市|百货'
},
{
index: 6,
name: '法律|教育|翻译|出版'
},
{
index: 7,
name: '财会 | 金融 | 保险'
},
{
index: 8,
name: '医疗 | 制药 | 环保'
}
]
// 鼠标移开
const mouseover = (row?: any) => {
const jobMenuJob: any = document.querySelector('.job-menu-sub')
jobMenuJob.style.display = 'block'
}
// 鼠标离开
const mouseout = (row?: any) => {
const jobMenuJob: any = document.querySelector('.job-menu-sub')
jobMenuJob.style.display = 'none'
}
</script>
<style lang="scss" scoped>
.main-container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
// overflow: hidden;
.banner-group {
// width: 1316px;
height: 424px;
display: flex;
.job-menu {
width: 238px;
height: 410px;
position: relative;
padding: 16px 0;
background-color: #ffffff;
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
box-sizing: border-box;
// background: rgba(79, 90, 102, 0.6);
.el-menu {
border-right: 0;
// background: transparent;
.menu-item-title {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.el-menu-item {
// color: #ffffff !important;
height: 42px;
}
}
.job-menu-sub {
display: none;
position: absolute;
top: 0;
left: 238px;
z-index: 10;
width: 700px;
height: 410px;
background: #fff;
.el-scrollbar {
padding: 16px 23px 0 24px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
:deep(.el-descriptions__label) {
margin-right: 0;
}
}
}
.banner-main {
width: 700px;
height: 410px;
}
.home-login {
width: 262px;
height: 410px;
display: flex;
flex-direction: column;
.login {
width: 100%;
height: 184px;
display: flex;
flex-direction: column;
align-items: center;
background-color: #ffffff;
padding: 20px;
box-sizing: border-box;
margin-bottom: 5px;
border-top-right-radius: 6px;
text {
margin-top: 15px;
font-weight: 500;
}
.login-btn {
margin-top: 15px;
}
}
.headlines {
flex: 1;
display: flex;
flex-direction: column;
padding: 20px;
background-color: #ffffff;
border-bottom-right-radius: 6px;
// overflow-y: scroll;
.news-group {
display: flex;
justify-content: space-between;
margin-bottom: 12px;
h2 {
margin: 0;
font-weight: 500;
font-size: 18px;
line-height: 18px;
font-family: Source Han Sans CN;
color: #333;
}
text {
font-size: 13px;
color: #1787fb;
cursor: pointer;
}
}
.el-link {
height: 22px;
margin-bottom: 5px;
}
:deep(.el-link__inner) {
font-family: Source Han Sans CN;
display: inline-block;
width: 200px; /* 设置宽度 */
overflow: hidden; /* 隐藏超出部分 */
text-overflow: ellipsis; /* 显示省略号 */
white-space: nowrap; /* 阻止文本换行 */
}
}
}
}
}
</style>
<template>
<div style="margin-bottom: 15px">
<div class="position-header">
<el-button type="primary" :icon="CirclePlusFilled">发布职位</el-button>
<el-button type="primary" :icon="CirclePlusFilled" @click="toEditPosition"
>发布职位</el-button
>
<div class="tag-list">
<el-tag
v-for="item in positionList"
......@@ -32,23 +34,35 @@
<span class="open"><span class="round open-round" /> 开放中</span>
<span>关闭</span>
<span>编辑</span>
<span>预览</span>
<span @click="preview">预览</span>
<span>删除</span>
</div>
</div>
</div>
</div>
<previewPosition v-model:show="previewShow" />
</template>
<script setup lang="ts">
import { CirclePlusFilled } from '@element-plus/icons-vue'
import { positionList } from '../config/index'
import previewPosition from './previewPosition.vue'
const tagActive = ref('全部职位')
const router = useRouter()
const tagActive = ref('职位管理')
const previewShow = ref(false)
const tagChange = (row: any) => {
tagActive.value = row.name
}
const toEditPosition = () => {
router.push('/recruitmentManagement/editPosition')
}
const preview = () => {
previewShow.value = true
}
</script>
<style lang="scss" scoped>
......
<template>
<el-dialog :modelValue="show" title="" width="50%" :before-close="handleClose">
<el-form label-width="110px" label-position="left">
<div class="position-info">
<div class="position-info-title">
<img src="@/assets/img/position.png" width="24" height="24" />
<span>职位基本信息</span>
</div>
<div style="margin-left: 42px">
<el-form-item label="公司:">
<span>深圳好利航·贸易/进出口·深圳市好利航国际货运代理有限公司武汉分公司</span>
</el-form-item>
<el-form-item label="招聘类型:"><span>校招</span></el-form-item>
<el-form-item label="职位名称:"><span>货代销售经理</span></el-form-item>
<el-form-item label="职位描述:">
<p>岗位职责:</p>
<p>
1.负责新销售团队的搭建、管理和组织,制定销售目标和销售策略,确保团队实现业绩目标,
</p>
<p>
2.建立和维护与客户的良好关系,开发新的客户资源,扩大市场份额,并促进客户满意度的提升,
</p>
<p>3.制定销售计划,并协助销售业绩的达成,及时调整销售策略,确保销售目标的实现,</p>
<p>
5.负责销售团队的绩效评估和管理,制定激励机制和培训计划,提高团队成员的销售能力和团队凝聚力,
</p>
<p>6.主持新员工的货代行业业务培训,确保团队成员对货运行业有深入的理解和认识。</p>
</el-form-item>
<el-form-item label="职位类型:"><span>货代销售经理</span></el-form-item>
</div>
<div class="position-info-title" style="margin: 30px 0 5px">
<img src="@/assets/img/position1.png" width="24" height="24" />
<span>职位基本信息</span>
</div>
<div style="margin-left: 42px">
<div class="flx-align-center">
<el-form-item label="经验和学历 :"
><span>5-10年</span
><span
style="
display: inline-block;
width: 4px;
height: 4px;
background: #cccccc;
border-radius: 50%;
margin: 0 4px;
"
></span>
<span>学历不限</span></el-form-item
>
</div>
<div class="flx-align-center">
<el-form-item label="薪资范围:"><span>10K-15K&nbsp;&nbsp;13个月</span></el-form-item>
</div>
<el-form-item label="工作地点:">深圳罗湖区</el-form-item>
<el-form-item label="职位关键词:" class="tag-label"
><el-tag v-for="item in 10" :key="item" style="margin: 0 12px 12px 0"
>带团队</el-tag
></el-form-item
>
</div>
</div>
</el-form>
</el-dialog>
</template>
<script setup lang="ts">
defineProps({
show: {
type: Boolean,
default: false
}
})
const emits = defineEmits(['update:show'])
const handleClose = () => {
emits('update:show', false)
}
</script>
<style lang="scss" scoped>
.el-form {
padding-left: 60px;
}
.position-info {
display: flex;
flex-direction: column;
font-size: 16px;
font-weight: 400;
color: #222222;
}
.position-info-title {
font-size: 18px;
display: flex;
align-items: center;
margin-bottom: 28px;
span {
margin-left: 16px;
}
}
.tag-label {
:deep(.el-form-item__label) {
margin-bottom: 12px;
}
}
</style>
export const filterList = [
export const filterList = ref([
{
name: '工作经验',
list: [
......@@ -160,7 +160,7 @@ export const filterList = [
}
]
}
]
])
export const recruitStatus = [
{ statu: '简历未查看', value: '10份' },
......
......@@ -5,7 +5,22 @@
<div class="title">编辑公司信息</div>
<el-form :model="state.form" label-width="90px" label-position="left">
<el-form-item label="公司LOGO" class="flx-align-center">
<img src="@/assets/img/icon-chuang.png" width="54" height="54" />
<el-upload
class="avatar-uploader"
action="#"
:show-file-list="false"
:on-success="handleAvatarSuccess"
>
<img
v-if="state.imageUrl"
:src="state.imageUrl"
class="avatar"
width="56"
height="56"
/>
<el-icon v-else class="avatar-uploader-icon"><i-ep-Plus /></el-icon>
</el-upload>
<!-- <img src="@/assets/img/icon-chuang.png" width="54" height="54" /> -->
</el-form-item>
<el-form-item label="公司名称">
<span>货拉拉科技</span>
......@@ -14,14 +29,20 @@
<div class="flx-direction-column">
<div
class="info-collapse flx-justify-between"
@click="state.companyTypeAcive = !state.companyTypeAcive"
@click="state.tradeAcive = !state.tradeAcive"
>
<div>请选择</div>
<el-icon v-show="state.companyTypeAcive"><i-ep-CaretTop /></el-icon>
<el-icon v-show="!state.companyTypeAcive"><i-ep-CaretBottom /></el-icon>
<div>{{ filterName(state.informationData?.Trade, state.form.a) }}</div>
<el-icon v-show="state.tradeAcive"><i-ep-CaretTop /></el-icon>
<el-icon v-show="!state.tradeAcive"><i-ep-CaretBottom /></el-icon>
</div>
<div v-show="state.companyTypeAcive" class="info-list">
<span v-for="(item, index) in 20" :key="index">不限酒水</span>
<div v-show="state.tradeAcive" class="info-list">
<span
v-for="item in state.informationData?.Trade"
:key="item.FNUMBER"
:style="{ color: state.form.a === item.FNUMBER ? '#177CFA' : '' }"
@click="handleChange('Trade', item.FNUMBER)"
>{{ item.FDATAVALUE }}</span
>
</div>
</div>
</el-form-item>
......@@ -29,14 +50,20 @@
<div class="flx-direction-column">
<div
class="info-collapse flx-justify-between"
@click="state.companyTypeAcive = !state.companyTypeAcive"
@click="state.memberAcive = !state.memberAcive"
>
<div>请选择</div>
<el-icon v-show="state.companyTypeAcive"><i-ep-CaretTop /></el-icon>
<el-icon v-show="!state.companyTypeAcive"><i-ep-CaretBottom /></el-icon>
<div>{{ filterName(state.informationData?.Member, state.form.b) }}</div>
<el-icon v-show="state.memberAcive"><i-ep-CaretTop /></el-icon>
<el-icon v-show="!state.memberAcive"><i-ep-CaretBottom /></el-icon>
</div>
<div v-show="state.companyTypeAcive" class="info-list">
<span v-for="(item, index) in 20" :key="index">不限酒水</span>
<div v-show="state.memberAcive" class="info-list">
<span
v-for="item in state.informationData?.Member"
:key="item.FNUMBER"
:style="{ color: state.form.b === item.FNUMBER ? '#177CFA' : '' }"
@click="handleChange('Member', item.FNUMBER)"
>{{ item.FDATAVALUE }}</span
>
</div>
</div>
</el-form-item>
......@@ -44,32 +71,45 @@
<div class="flx-direction-column">
<div
class="info-collapse flx-justify-between"
@click="state.companyTypeAcive = !state.companyTypeAcive"
@click="state.financingAcive = !state.financingAcive"
>
<div>请选择</div>
<el-icon v-show="state.companyTypeAcive"><i-ep-CaretTop /></el-icon>
<el-icon v-show="!state.companyTypeAcive"><i-ep-CaretBottom /></el-icon>
<div>{{ filterName(state.informationData?.Financing, state.form.c) }}</div>
<el-icon v-show="state.financingAcive"><i-ep-CaretTop /></el-icon>
<el-icon v-show="!state.financingAcive"><i-ep-CaretBottom /></el-icon>
</div>
<div v-show="state.companyTypeAcive" class="info-list">
<span v-for="(item, index) in 20" :key="index">不限酒水</span>
<div v-show="state.financingAcive" class="info-list">
<span
v-for="item in state.informationData?.Financing"
:key="item.FNUMBER"
:style="{ color: state.form.c === item.FNUMBER ? '#177CFA' : '' }"
@click="handleChange('Financing', item.FNUMBER)"
>{{ item.FDATAVALUE }}</span
>
</div>
</div>
</el-form-item>
<el-form-item label="公司地址">
<span>深圳市南山区南山街道办1109号7-6楼</span>
<!-- <span>深圳市南山区南山街道办1109号7-6楼</span> -->
<el-input v-model="state.form.name" placeholder="请填写真实有效的公司地址" />
</el-form-item>
<el-form-item label="所在街道办">
<div class="flx-direction-column">
<div
class="info-collapse flx-justify-between"
@click="state.companyTypeAcive = !state.companyTypeAcive"
@click="state.streetAcive = !state.streetAcive"
>
<div>请选择</div>
<el-icon v-show="state.companyTypeAcive"><i-ep-CaretTop /></el-icon>
<el-icon v-show="!state.companyTypeAcive"><i-ep-CaretBottom /></el-icon>
<div>{{ filterName(state.streetList, state.form.d) }}</div>
<el-icon v-show="state.streetAcive"><i-ep-CaretTop /></el-icon>
<el-icon v-show="!state.streetAcive"><i-ep-CaretBottom /></el-icon>
</div>
<div v-show="state.companyTypeAcive" class="info-list">
<span v-for="(item, index) in 20" :key="index">不限酒水</span>
<div v-show="state.streetAcive" class="info-list">
<span
v-for="item in state.streetList"
:key="item.FNUMBER"
:style="{ color: state.form.d === item.FNUMBER ? '#177CFA' : '' }"
@click="handleChange('Street', item.FNUMBER)"
>{{ item.FNAME }}</span
>
</div>
</div>
</el-form-item>
......@@ -80,16 +120,83 @@
</div>
<div class="confirm">
<span>确定</span>
<!-- <span>提交审核</span> -->
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { getInformation } from '@/services/api/common'
import { getStreet } from '@/services/api/streetOfficeSpecialTopic'
const route = useRoute()
const state = reactive({
form: {} as any,
companyTypeAcive: false,
companyType: ''
form: {
a: '',
b: '',
c: '',
d: ''
} as any,
informationData: {} as any,
streetList: [] as any,
tradeAcive: false,
memberAcive: false,
financingAcive: false,
streetAcive: false,
companyType: '',
imageUrl: '',
isAdd: false,
companyName: ''
})
const handleAvatarSuccess = (response: any, uploadFile: any) => {
// state.imageUrl = URL.createObjectURL(uploadFile.raw!)
}
const filterName = (list: any[] = [], FNUMBER: string) => {
let row: any = list?.filter((item: any) => item.FNUMBER === FNUMBER)
return row.length ? (row[0].FDATAVALUE ? row[0].FDATAVALUE : row[0].FNAME) : '请选择'
}
const handleChange = (type: string, FNUMBER: string) => {
switch (type) {
case 'Trade':
state.form.a = FNUMBER
break
case 'Member':
state.form.b = FNUMBER
break
case 'Financing':
state.form.c = FNUMBER
break
default:
state.form.d = FNUMBER
break
}
}
const init = async () => {
const res: any = await getInformation({
AuxiliaryS: ['EDUCATION', 'Financing', 'Member', 'Trade']
})
if (res.code === 200) {
state.informationData = res.data
}
const street: any = await getStreet()
if (street.code === 200) {
state.streetList = street.data
console.log(state.streetList)
}
}
onMounted(() => {
const { register, companyName }: any = route.query
if (register) {
state.isAdd = true
state.companyName = companyName
}
init()
})
</script>
......
<template>
<div class="flx-center" style="flex-direction: column">
<div class="container">
<div class="title">编辑公司信息</div>
<el-form :model="state.form" label-width="110px" label-position="left" style="width: 774px">
<div class="position-info">
<div class="position-info-title">
<img src="@/assets/img/position.png" width="24" height="24" />
<span>职位基本信息</span>
</div>
<div style="margin-left: 42px">
<el-form-item label="公司:">
<span>深圳好利航·贸易/进出口·深圳市好利航国际货运代理有限公司武汉分公司</span>
</el-form-item>
<el-form-item label="招聘类型:">
<el-select v-model="state.form.a" placeholder="请选择招聘类型">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="职位名称:">
<el-input v-model="state.form.b" placeholder="请输入职位名称" />
</el-form-item>
<el-form-item label="职位描述:">
<el-input
v-model="state.form.d"
type="textarea"
:rows="6"
:maxlength="5000"
placeholder="请勿填写QQ、微信、电话等联系方式及特殊符号、性别歧视词、违反劳动法相关内容,否则有可能会导致您的账号被封禁。"
/>
</el-form-item>
<el-form-item label="职位类型:">
<el-cascader
v-model="state.form.e"
:options="state.cascaderOptions"
:props="state.cascaderProps"
placeholder="请选择职位类型"
@change="handleChange"
/>
</el-form-item>
</div>
<div class="position-info-title" style="margin: 30px 0 5px">
<img src="@/assets/img/position1.png" width="24" height="24" />
<span>职位基本信息</span>
</div>
<div style="margin-left: 42px">
<p>我们将通过以下条件,为您精确推荐合适的牛人,请尽量详细填写</p>
<div class="flx-align-center">
<el-form-item label="经验和学历 :" style="width: 56.5%">
<el-select v-model="state.form.l" placeholder="请选择经验">
<el-option
v-for="item in state.informationData?.Experience"
:key="item.FNUMBER"
:label="item.FDATAVALUE"
:value="item.FNUMBER"
/>
</el-select>
</el-form-item>
<el-form-item label="" class="empty-label" style="width: 43.5%">
<el-select v-model="state.form.k" placeholder="请选择学历">
<el-option
v-for="item in state.informationData?.Degree2"
:key="item.FNUMBER"
:label="item.FDATAVALUE"
:value="item.FNUMBER"
/>
</el-select>
</el-form-item>
</div>
<div class="flx-align-center">
<el-form-item label="薪资范围:" style="width: 56.5%">
<el-select
v-model="state.form.f"
placeholder="请选择最低工资"
@change="salaryChange"
>
<el-option
v-for="item in state.lowSalary"
:key="item.FNUMBER"
:label="item.FDATAVALUE"
:value="item.FNUMBER"
/>
</el-select>
</el-form-item>
<el-form-item label="" class="empty-label" style="width: 22%">
<el-select v-model="state.form.g" placeholder="请选择最高工资">
<el-option
v-for="item in state.informationData?.Salary"
:key="item.FNUMBER"
:label="item.FDATAVALUE"
:value="item.FNUMBER"
/>
</el-select>
</el-form-item>
<span
style="display: inline-block; height: 30px; line-height: 20px; margin-left: 12px"
>*</span
>
<el-form-item label="" class="empty-label" style="width: 19%">
<el-select v-model="state.form.h" placeholder=" ">
<el-option
v-for="item in state.informationData?.Month"
:key="item.FNUMBER"
:label="item.FDATAVALUE"
:value="item.FNUMBER"
/>
</el-select>
</el-form-item>
</div>
<el-form-item label="职位关键词:">
<el-tag
v-for="tag in state.dynamicTags"
:key="tag"
closable
size="large"
:disable-transitions="false"
style="margin: 0 12px 12px 0"
@close="handleClose(tag)"
>
{{ tag }}
</el-tag>
<el-input
v-if="state.inputVisible"
ref="InputRef"
v-model="state.inputValue"
style="width: 14%; margin: 0 12px 12px 0"
@keyup.enter="handleInputConfirm"
@blur="handleInputConfirm"
/>
<el-button v-else style="margin: 0 12px 12px 0" @click="showInput">
+ 关键词
</el-button>
</el-form-item>
<el-form-item label="职位名称:">
<el-input v-model="state.form.b" placeholder="请输入工作地点" />
</el-form-item>
<p style="margin-left: 110px">请填写真实有效地址,若查实造假,将受到平台处罚。</p>
</div>
</div>
</el-form>
<div class="agree">已阅读并遵守《南山就业帮职位信息发布规则》</div>
</div>
<div style="margin-bottom: 76px">
<el-button style="background-color: #cccccc; color: #ffffff">取消</el-button>
<el-button type="primary" style="background-color: #177cfa">保存并发布</el-button>
</div>
</div>
</template>
<script setup lang="ts">
import { getInformation } from '@/services/api/common'
import { getPosition } from '@/services/api/recruitmentManagement'
import { CascaderProps } from 'element-plus'
const state = reactive({
form: {} as any,
dynamicTags: [] as any,
inputValue: '',
inputVisible: false,
cascaderProps: {
children: 'TypeJobS',
label: 'FDATAVALUE',
value: 'FDATAVALUE'
} as CascaderProps,
cascaderOptions: [],
informationData: {} as any,
lowSalary: [] as any
})
const InputRef = ref()
const options = [
{
value: 'Option1',
label: 'Option1'
},
{
value: 'Option2',
label: 'Option2'
},
{
value: 'Option3',
label: 'Option3'
},
{
value: 'Option4',
label: 'Option4'
},
{
value: 'Option5',
label: 'Option5'
}
]
const handleChange = (value: any) => {
console.log(value)
}
const salaryChange = (Val: string) => {
// 低工资
const row = state.informationData?.Salary.find((item: any) => item.FNUMBER === Val)
// 高工资
const tallRow = state.informationData?.Salary.find((item: any) => item.FNUMBER === state.form.g)
if (tallRow?.FDESCRIPTION === '不限') return
if (row) {
if (!tallRow || Number(tallRow.FDESCRIPTION) <= Number(row.FDESCRIPTION)) {
const index = state.informationData.Salary.findIndex((item: any) => item.FNUMBER === Val)
state.form.g = state.informationData?.Salary[index + 1].FNUMBER
}
}
}
const handleClose = (tag: string) => {
state.dynamicTags.splice(state.dynamicTags.indexOf(tag), 1)
}
const showInput = () => {
state.inputVisible = true
nextTick(() => {
InputRef.value!.input!.focus()
})
}
const handleInputConfirm = () => {
if (state.inputValue) {
state.dynamicTags.push(state.inputValue)
}
state.inputVisible = false
state.inputValue = ''
}
const init = async () => {
const res: any = await getPosition()
if (res.code === 200) {
state.cascaderOptions = res.data.LevelJobS
}
const info: any = await getInformation({
AuxiliaryS: ['Experience', 'Month', 'Salary', 'Degree2']
})
if (info.code === 200) {
state.informationData = info.data
state.lowSalary = info.data?.Salary.slice(0, info.data?.Salary.length - 1)
}
}
init()
</script>
<style lang="scss" scoped>
@import url(./style/editPosition.scss);
</style>
......@@ -4,7 +4,7 @@
<div class="banner-group">
<div style="width: 444px; box-sizing: border-box" @mouseover="mouseover" @mouseout="mouseout">
<div class="job-menu">
<el-menu class="el-menu-vertical-demo">
<el-menu>
<el-menu-item
v-for="item in menuList"
:key="item.index"
......@@ -13,7 +13,7 @@
>
<template #title>
<div class="menu-item-title">
<span>{{ item.name }}</span>
<span>{{ item.FDATAVALUE }}</span>
<el-icon><i-ep-ArrowRight /></el-icon>
</div>
</template>
......@@ -21,26 +21,39 @@
</el-menu>
<div class="job-menu-sub" @mouseover="mouseover" @mouseout="mouseout">
<el-scrollbar height="400px">
<el-descriptions v-for="item in 10" :key="item" :column="4">
<template #title>
<div style="font-size: 14px; font-weight: 400">销售</div>
</template>
<el-descriptions-item v-for="item1 in 4" :key="item1">
<template #default>
<router-link :to="{ path: '#' }" style="text-decoration: none">
<el-link :underline="false">销售业务</el-link>
</router-link>
</template>
</el-descriptions-item>
</el-descriptions>
<div style="margin-bottom: 16px">{{ FDATAVALUE }}</div>
<div class="job-menu-sub-list">
<div v-for="(item, index) in subMenuList" :key="index" class="job-menu-sub-item">
<div class="job-menu-sub-label nowrap-ellipsis">{{ item.FDATAVALUE }}</div>
<div style="flex: 1">
<div class="job-menu-sub-content">
<span v-for="(col, cIndex) in item.JobS" :key="cIndex">
<router-link
:to="{
path: '/recruitmentManagement/personal',
query: { FDATAVALUE: col.FDATAVALUE }
}"
style="text-decoration: none"
>
<el-link :underline="false">{{ col.FDATAVALUE }}</el-link>
</router-link>
</span>
</div>
<el-divider v-show="item.JobS.length" style="margin: 6px 0 0 0" />
</div>
</div>
</div>
</el-scrollbar>
</div>
</div>
</div>
<div class="street-list">
<img v-for="(item, index) in streetImgList" :key="index" :src="item" />
<img
v-for="(item, index) in streetList"
:key="index"
:src="baseURL + '/' + item.FCOVERPICTURE"
/>
</div>
<!-- <div style="width: 16px; height: 100%" @mouseover="mouseover" @mouseout="mouseout" /> -->
</div>
<div class="hot-position">
......@@ -140,71 +153,17 @@
</template>
<script setup lang="ts">
import { baseURL } from '@/services'
import { getPosition } from '@/services/api/recruitmentManagement'
import { getStreet } from '@/services/api/streetOfficeSpecialTopic'
import search from '@/components/search.vue'
import Frame376 from '@/assets/img/Frame376.png'
import Frame377 from '@/assets/img/Frame377.png'
import Frame378 from '@/assets/img/Frame378.png'
import Frame379 from '@/assets/img/Frame379.png'
import Frame380 from '@/assets/img/Frame380.png'
import Frame515 from '@/assets/img/Frame515.png'
import Frame381 from '@/assets/img/Frame381.png'
import Frame382 from '@/assets/img/Frame382.png'
const router = useRouter()
const menuList = [
{
index: 0,
name: '销售|客服|采购|淘宝'
},
{
index: 1,
name: '人力|行政|管理'
},
{
index: 2,
name: '网络|通信|电子|电气'
},
{
index: 3,
name: '市场|媒介|广告|设计'
},
{
index: 4,
name: '建筑|物业|农林牧渔|其他'
},
{
index: 5,
name: '生活| 服务业|超市|百货'
},
{
index: 6,
name: '法律|教育|翻译|出版'
},
{
index: 7,
name: '财会 | 金融 | 保险'
},
{
index: 8,
name: '医疗 | 制药 | 环保'
},
{
index: 9,
name: '珠宝/奢侈品/收藏品/工艺品'
}
]
const menuList = ref([] as any)
const FDATAVALUE = ref()
const streetImgList = [
Frame376,
Frame377,
Frame378,
Frame379,
Frame380,
Frame515,
Frame382,
Frame381
]
const streetList = ref()
const tabsList = [
{ label: '市场', name: 0 },
......@@ -226,6 +185,13 @@ const searchChange = (searchValue: string) => {
router.push({ path: '/recruitmentManagement/personal', query: { searchValue } })
}
const subMenuList = computed(() => {
if (!FDATAVALUE.value) return []
const list = JSON.parse(JSON.stringify(menuList.value)) || []
const row = list.filter((item: any) => item.FDATAVALUE === FDATAVALUE.value)?.[0]?.TypeJobS
return row ? row : []
})
// 鼠标移入
const mouseover = (row?: any) => {
const jobMenuJob: any = document.querySelector('.job-menu-sub')
......@@ -233,7 +199,7 @@ const mouseover = (row?: any) => {
jobMenuJob.style.display = 'block'
jobMenu.style.borderRadius = '12px 0 0 12px'
jobMenuJob.style.borderRadius = '0 12px 12px 0'
if (!row) return
if (row.FDATAVALUE) FDATAVALUE.value = row.FDATAVALUE
}
// 鼠标离开
......@@ -245,6 +211,20 @@ const mouseout = (row?: any) => {
jobMenuJob.style.borderRadius = '12px'
if (!row) return
}
const init = async () => {
const res: any = await getPosition()
if (res.code === 200) {
menuList.value = res.data.LevelJobS.filter((item: any, i: number) => i < 10)
}
const street: any = await getStreet()
if (street.code === 200) {
streetList.value = street.data.sort((a: any, b: any) => a.FSERIALNUMBER - b.FSERIALNUMBER)
}
}
init()
</script>
<style lang="scss" scoped>
......
......@@ -4,6 +4,7 @@
<div class="personal-filter flx-direction-column">
<div class="personal-header">
<search
ref="searchRef"
placeholder="搜索关键字"
style="margin-bottom: 22px"
@search-change="searchChange"
......@@ -18,7 +19,7 @@
:type="item.active ? 'primary' : ''"
link
@click="streetChange(index)"
>{{ item.name }}</el-button
>{{ item.FNAME }}</el-button
>
</div>
<div class="flx-justify-between">
......@@ -124,23 +125,20 @@
import { filterList } from './config/index'
import { useUserInfoStore } from '@/stores/modules/userInfo'
import { useGlobalStore } from '@/stores/modules/global'
import { getStreet } from '@/services/api/streetOfficeSpecialTopic'
import { getInformation } from '@/services/api/common'
import search from '@/components/search.vue'
import customSelect from '@/components/customSelect.vue'
const globalStore = useGlobalStore()
const userInfoStore = useUserInfoStore()
const route = useRoute()
const activeName = ref('0')
const searchRef = ref()
const streetActive = ref('粤海街道办')
const streetList = ref([
{ name: '粤海街道办', active: true },
{ name: '南山街道办', active: false },
{ name: '南头街道办', active: false },
{ name: '西明街道办', active: false },
{ name: '招商街道办', active: false },
{ name: '桃源街道办', active: false },
{ name: '沙河街道办', active: false },
{ name: '蛇口街道办', active: false }
])
const streetList = ref([] as any)
const informationData = ref()
const filterState: any = ref({
selectVal: '',
......@@ -172,6 +170,35 @@ const clearFilter = () => {
selectVal4: ''
}
}
const init = async () => {
const street: any = await getStreet()
if (street.code === 200) {
streetList.value = street.data.sort((a: any, b: any) => a.FSERIALNUMBER - b.FSERIALNUMBER)
streetList.value.map((item: any, i: number) => {
if (i === 0) item.active = true
else item.active = false
})
}
const res: any = await getInformation({
AuxiliaryS: ['Experience', 'SalaryRange', 'Degree2', 'Member', 'Financing']
})
if (res.code === 200) {
informationData.value = res.data
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
console.log(filterList)
}
}
onMounted(() => {
const { FDATAVALUE } = route.query
searchRef.value.searchValue = FDATAVALUE
init()
})
</script>
<style lang="scss" scoped>
......
......@@ -9,6 +9,22 @@
background: #ffffff;
box-shadow: 0px 1px 25px 0px rgba(0, 0, 0, 0.05);
border-radius: 8px;
.avatar-uploader .el-upload {
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.el-icon.avatar-uploader-icon {
font-size: 24px;
color: #8c939d;
width: 56px;
height: 56px;
text-align: center;
border: 1px dashed var(--el-border-color);
}
}
.title {
font-size: 24px;
......@@ -50,7 +66,8 @@
}
}
:deep(.el-textarea__inner) {
:deep(.el-textarea__inner),
:deep(.el-input__wrapper) {
background: #f8f8f8;
}
......
.container {
width: 1316px;
background: #ffffff;
box-shadow: 0px 4px 25px 0px rgba(0, 0, 0, 0.05);
margin: 24px 0 60px;
padding: 36px 0;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
.title {
font-size: 24px;
font-weight: 500;
color: #177cfa;
margin-bottom: 42px;
}
.position-info {
display: flex;
flex-direction: column;
font-size: 16px;
font-weight: 400;
color: #222222;
}
.position-info-title {
font-size: 18px;
display: flex;
align-items: center;
margin-bottom: 28px;
span {
margin-left: 16px;
}
}
p {
font-size: 14px;
font-weight: 400;
color: #666666;
line-height: 16px;
margin-bottom: 28px;
}
.empty-label {
:deep(.el-form-item__content) {
margin-left: 12px !important;
}
}
.el-select {
width: 100%;
}
.agree {
font-size: 14px;
font-weight: 400;
color: #222222;
}
}
......@@ -40,8 +40,41 @@
height: 418px;
border-radius: 12px;
box-sizing: border-box;
background: #fff;
.job-menu-sub-list {
display: flex;
flex-direction: column;
width: 825px;
.job-menu-sub-item {
display: flex;
align-items: start;
font-size: 14px;
margin: 10px 0;
&:last-child {
.el-divider {
display: none;
}
}
.job-menu-sub-label {
width: 140px;
color: #73767a;
margin-right: 10px;
}
.job-menu-sub-content {
flex: 1;
display: flex;
flex-wrap: wrap;
color: #222222;
span {
margin: 0 20px 6px 0;
}
}
}
}
.el-scrollbar {
padding: 16px 23px 0 24px;
-webkit-box-sizing: border-box;
......
......@@ -14,16 +14,10 @@ declare module 'vue' {
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
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']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDivider: typeof import('element-plus/es')['ElDivider']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
......@@ -41,16 +35,13 @@ declare module 'vue' {
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRate: typeof import('element-plus/es')['ElRate']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElUpload: typeof import('element-plus/es')['ElUpload']
IEpArrowRight: typeof import('~icons/ep/arrow-right')['default']
IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
......@@ -58,6 +49,7 @@ declare module 'vue' {
IEpDArrowRight: typeof import('~icons/ep/d-arrow-right')['default']
IEpLocation: typeof import('~icons/ep/location')['default']
IEpOfficeBuilding: typeof import('~icons/ep/office-building')['default']
IEpPlus: typeof import('~icons/ep/plus')['default']
IEpSearch: typeof import('~icons/ep/search')['default']
IEpView: typeof import('~icons/ep/view')['default']
Policy: typeof import('./../src/components/policy.vue')['default']
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论