Bläddra i källkod

招聘会路由调整

Xiao_123 1 månad sedan
förälder
incheckning
8200c12387

+ 0 - 5
src/router/modules/recruit.js

@@ -277,11 +277,6 @@ const recruit = [
         },
       ]
     },
-    {
-      path: '/recruit/personal/jobFair/:id',
-      component: () => import('@/views/recruit/personal/jobFair/details/index.vue'),
-      name: 'jobFairDetails'
-    },
     {
       path: '/recruit/personal/jobFair/enterprises/:id',
       component: () => import('@/views/recruit/personal/jobFair/details/enterprises.vue'),

+ 0 - 61
src/views/recruit/personal/jobFair/details/components/entCard.vue

@@ -1,61 +0,0 @@
-<template>
-	<v-hover v-slot="{ isHovering, props }" v-for="(val, index) in list" :key="val.id">
-		<v-card v-bind="props" :elevation="isHovering ? 10 : 5" class="cursor-pointer mb-3" :class="{'active': chosenIndex === index}" width="500" @click="handleClickEnterprise(val, index)">
-			<div class="d-flex pa-4 pb-2">
-				<img :src="val.logoUrl || 'https://minio.citupro.com/dev/menduner/company-avatar.png'" style="width: 80px; height: 80px; border-radius: 4px;" />
-				<div style="max-width: 390px;">
-					<h3 v-ellipse-tooltip class="enterprise-name ml-3">{{ formatName(val.anotherName || val.name) }}</h3>
-					<p class="font-size-14 color-666 mt-1 mb-2 ml-3">
-						<span>{{ val.industryName }}</span>
-						<span class="septal-line" v-if="val.industryName && val.scaleName"></span>
-						<span>{{ val.scaleName }}</span>
-					</p>
-					<div class="flex-nowrap overflow-hidden pl-3" style="height: 35px;">
-						<v-chip v-for="(welfare, index) in val.welfareList" :key="index" class="mr-2 mb-4 display-inline-block" variant="flat" color="primary" size="small">
-							{{ welfare }}
-						</v-chip>
-					</div>
-				</div>
-			</div>
-			<div class="card-bottom">{{ val.jobCount }}个在线职位招聘中</div>
-		</v-card>
-	</v-hover>
-</template>
-
-<script setup>
-defineOptions({ name: 'EntCard' })
-import { formatName } from '@/utils/getText'
-import { ref } from 'vue'
-
-const emit = defineEmits(['selectChange'])
-defineProps({
-	list: Array
-})
-
-const chosenIndex = ref(0)
-
-const handleClickEnterprise = (val, index) => {
-	chosenIndex.value = index
-	emit('selectChange', val)
-}
-</script>
-
-<style scoped lang="scss">
-.card-bottom {
-	height: 40px;
-	line-height: 40px;
-	color: #fff;
-	text-align: center;
-	font-size: 15px;
-	background: linear-gradient(to right, #12ebb0, #427daa);
-}
-
-.active {
-	border: 1px solid var(--v-primary-base);
-}
-.v-card:hover {
-	h3 {
-		color: var(--v-primary-base);
-	}
-}
-</style>

+ 0 - 149
src/views/recruit/personal/jobFair/details/components/jobCard.vue

@@ -1,149 +0,0 @@
-<template>
-	<!-- <div class="resume-header mb-4 mt-1">
-    <div class="resume-title" v-ellipse-tooltip style="max-width: 400px;">{{ enterpriseName }}</div>
-		<TextInput :item="textItem" @enter="handleSearch" @appendInnerClick="handleSearch" />
-  </div> -->
-	<div v-if="items.length > 0" v-loading="loading">
-		<v-hover v-slot="{ isHovering, props }" v-for="val in items" :key="val.id">
-			<v-card  class="cursor-pointer mb-3 pa-3" v-bind="props" :elevation="isHovering ? 10 : 5" @click="handleClick(val.id)">
-				<div class="d-flex justify-space-between">
-					<div class="d-flex align-center">
-						<svg-icon name="jobFair" size="20" class="mr-1"></svg-icon>
-						<p class="job-name" v-ellipse-tooltip>{{ formatName(val.name) }}</p>
-					</div>
-					<p v-if="!val.payFrom && !val.payTo" class="salary">面议</p>
-					<p v-else class="salary ml-3">{{ val.payFrom ? val.payFrom + '-' : '' }}{{ val.payTo }}{{ val.payName ? '/' + val.payName : '' }}</p>
-				</div>
-				<div class="d-flex justify-space-between mt-3">
-					<div class="color-666 font-size-14">
-						<span v-for="k in desc" :key="k.mdi">
-							<span v-if="val[k.value] || k.value === 'areaName'" class="mr-5">
-								<v-icon color="var(--color-666)" size="15">{{ k.mdi }}</v-icon>
-								<span class="ml-1 tag-text">
-									{{ k.value === 'areaName' ? !val.areaId ? '全国' : val.area?.str : val[k.value] }}
-								</span>
-							</span>
-						</span>
-					</div>
-					<div class="font-size-14 color-999">{{ timesTampChange(val.updateTime) }} 刷新</div>
-				</div>
-			</v-card>
-		</v-hover>
-		<div :class="['loading', {'defaultLink-i': !loadingType}]" @click="handleChangePage">{{ loadingText[loadingType] }}</div>
-	</div>
-	<Empty v-else :elevation="false" message="该企业暂无在招职位,换个企业试试吧"></Empty>
-</template>
-
-<script setup>
-defineOptions({ name: 'jobCard' })
-import { ref, watch, reactive } from 'vue'
-import { formatName } from '@/utils/getText'
-import { getJobFairEntJobPage } from '@/api/recruit/personal/jobFair'
-import { dealDictArrayData } from '@/utils/position'
-import { timesTampChange } from '@/utils/date'
-
-const props = defineProps({
-	enterpriseId: [String, Number],
-	enterpriseName: String,
-	jobFairId: [String, Number]
-})
-
-const loading = ref(false)
-const items = ref([])
-const query = reactive({
-	pageNo: 1,
-	pageSize: 10,
-	keyword: '',
-	jobFairId: props.jobFairId
-})
-// 城市、学历、工作经验
-const desc = [
-  { mdi: 'mdi-map-marker-outline', value: 'areaName' },
-  { mdi: 'mdi-school-outline', value: 'eduName' },
-  { mdi: 'mdi-clock-time-ten-outline', value: 'expName' }
-]
-const textItem = ref({
-  type: 'text',
-  width: 220,
-  value: '',
-  label: '职位关键字',
-	placeholder: '请输入职位关键字',
-  clearable: true,
-	hideDetails: true,
-  appendInnerIcon: 'mdi-magnify'
-})
-const loadingText = ['加载更多', '加载中...', '没有更多数据了']
-const loadingType = ref(0)
-
-// 职位列表
-const getPositionList = async () => {
-	loading.value = true
-	loadingType.value = 1
-	try {
-		const { list, total } = await getJobFairEntJobPage(query)
-		if (!list || !list.length) {
-			items.value = []
-			total.value = 0
-			loadingType.value = 2
-			return
-		}
-		items.value = items.value.concat(dealDictArrayData([], list))
-		loadingType.value = items.value.length === total ? 2 : 0
-		loading.value = false
-	} catch {}
-}
-
-// 职位关键字检索
-const handleSearch = (val) => {
-	query.keyword = val
-	query.pageNo = 1
-	getPositionList()
-}
-
-// 加载更多
-const handleChangePage = () => {
-  if (loadingType.value) return // 没有更多数据了
-  query.pageNo++
-  getPositionList()
-}
-
-watch(
-	() => props.enterpriseId,
-	(val) => {
-		query.enterpriseId = val
-		query.keyword = ''
-		query.pageNo = 1
-		items.value = []
-		getPositionList()
-	},
-	{ immediate: true }
-)
-
-// 跳转职位详情
-const handleClick = (id) => {
-	window.open(`/recruit/personal/position/details/${id}?jobFairId=${props.jobFairId}`)
-}
-</script>
-
-<style scoped lang="scss">
-.salary {
-	color: var(--v-primary-base);
-	font-weight: 700;
-}
-.job-name {
-	color: #0E100F;
-	font-weight: 700;
-	max-width: 420px;
-}
-.v-card:hover {
-	.job-name {
-		color: var(--v-primary-base)
-	}
-}
-.loading {
-  margin-top: 8px;
-  text-align: center;
-  font-size: 13px;
-  color: gray;
-}
-</style>

+ 0 - 180
src/views/recruit/personal/jobFair/details/index.vue

@@ -1,180 +0,0 @@
-<template>
-  <div>
-    <!-- <div style="background-color: #fff; position: sticky;"> -->
-      <!-- <buttons :current="3" class="mb-3"></buttons> -->
-			<!-- <v-breadcrumbs v-if="breadcrumbs?.length" :items="breadcrumbs">
-				<template v-slot:item="{ item }">
-					<span class="breadcrumbsText" :class="{ active: !item.disabled }" @click="handleClick(item)">{{ item.text }}</span>
-				</template>
-			</v-breadcrumbs> -->
-
-			<!-- <headSearch v-model="query.keyword" :class="{'mt-3': !breadcrumbs?.length}" placeholder="搜索公司关键字" @handleSearch="handleSearch"></headSearch> -->
-    <!-- </div> -->
-
-    <!-- <v-carousel :show-arrows="cursor.length > 1 ? 'hover' : false" :hide-delimiters="true" cycle style="height: 300px;">
-      <v-carousel-item v-for="(k, i) in cursor" :key="i">
-				<v-img :src="k" :lazy-src="k" width="1184" height="300" cover>
-					<template v-slot:placeholder>
-						<v-row align="center" class="fill-height ma-0" justify="center">
-							<v-progress-circular color="grey-lighten-5" indeterminate></v-progress-circular>
-						</v-row>
-					</template>
-				</v-img>
-			</v-carousel-item>
-    </v-carousel> -->
-    <v-carousel :show-arrows="cursor.length > 1 ? 'hover' : false" cycle :hide-delimiters="true" style="height: 500px;">
-			<v-carousel-item v-for="(k, i) in cursor" :key="i">
-				<img :src="k" :lazy-src="k" style="width: 100%; height:100%;">
-			</v-carousel-item>
-		</v-carousel>
-    <div style="background-color: #7ec04c">
-      <div class="default-width">
-        <Empty v-if="!items.length && !query.keyword" :message="loadingType === 1 ? loadingText[loadingType] : '该招聘会暂无企业参与,前往其他招聘会看看吧~'" class="mt-3 py-15"></Empty>
-        <template v-else>
-          <div class="d-flex">
-            <div class="mt-3">
-              <EntCard :list="items" @selectChange="selectChange" />
-              <div :class="['loading', {'defaultLink-i': !loadingType}]" @click="handleChangePage">{{ loadingText[loadingType] }}</div>
-            </div>
-            <div class="position-details ml-3" style="flex: 1; overflow: hidden;">
-              <div class="position-content px-3">
-                <JobCard :enterpriseId="enterpriseId" :enterpriseName="enterpriseName" :jobFairId="route.params.id" />
-              </div>
-            </div>
-          </div>
-        </template>
-      </div>
-    </div>
-
-  </div>
-
-</template>
-
-<script setup>
-defineOptions({ name: 'jobFairPosition' })
-import buttons from '@/views/recruit/personal/components/buttons.vue'
-import { ref, reactive } from 'vue'
-import { getJobFairEnterprisePage, getJobFair } from '@/api/recruit/personal/jobFair'
-import EntCard from './components/entCard.vue'
-import JobCard from './components/jobCard.vue'
-import { useRoute, useRouter } from 'vue-router'; const route = useRoute(); const router = useRouter()
-import { formatName } from '@/utils/getText'
-import { dealDictArrayData } from '@/utils/position'
-
-const cursor = ref([
-  // "https://menduner.citupro.com:3443/dev/9de969f4723dd8819794fcd2d91b47a2f2b6f16993908712a53ee6a21f6735f1.jpg",
-  "https://minio.menduner.com/dev/fed8685fb4fec65347c2e3756db230ddd9c8f3538998c5678efe5acb51fb74e1.jpg"
-])
-const breadcrumbs = ref([
-  { text: '招聘会', path: '/recruit/personal/jobFair' },
-  { text: '', path: '', disabled: true }
-])
-const handleClick = (item) => {
-  if (!item.path || item.disabled) return
-  router.push(item.path)
-}
-// 招聘会详情-面包屑标题设置
-const getJobFairDetail = async () => {
-  const data = await getJobFair(route?.params?.id)
-  if (!data) return
-  // breadcrumbs.value[breadcrumbs.value.length - 1].text = data.title.replace(/<\/?p[^>]*>/gi, '')
-  document.title = data.title.replace(/<\/?p[^>]*>/gi, '')
-}
-getJobFairDetail()
-
-// 切换企业选中
-const enterpriseId = ref('')
-const enterpriseName = ref('')
-const selectChange = (val) => {
-	enterpriseId.value = val.id
-	enterpriseName.value = formatName(val.anotherName || val.name)
-}
-
-const query = reactive({
-  pageNo: 1,
-  pageSize: 10,
-	jobFairId: route.params.id,
-	keyword: ''
-})
-
-const items = ref([])
-const loadingText = ['加载更多', '加载中...', '没有更多数据了']
-const loadingType = ref(0)
-
-// 参与招聘会的企业
-const getList = async () => {
-	loadingType.value = 1
-	try {
-		const result = await getJobFairEnterprisePage(query)
-		const list = result?.list || []
-		if (list.length) {
-			items.value = items.value.concat(dealDictArrayData([], list))
-			loadingType.value = items.value.length === result.total ? 2 : 0
-			enterpriseId.value = items.value[0].id
-			enterpriseName.value = formatName(items.value[0].anotherName || items.value[0].name)
-		} else {
-			loadingType.value = 2
-		}
-	} catch {}
-}
-getList()
-
-const handleSearch = (val) => {
-	query.keyword = val
-	query.pageNo = 1
-	items.value = []
-	getList()
-}
-
-const handleChangePage = () => {
-  if (loadingType.value) return // 没有更多数据了
-  // 加载更多
-  query.pageNo++
-  getList()
-}
-</script>
-
-<style scoped lang="scss">
-.position-details {
-  position: sticky;
-  top: 62px;
-  border-radius: 12px;
-  // background-color: #fff;
-  margin-top: 12px;
-  height: calc(100vh - 127px);
-  widows: 100%;
-  overflow: hidden;
-  .position-content {
-    height: 100%;
-    width: 100%;
-    padding-right: 4px;
-    overflow-y: auto;
-  }
-}
-.loading {
-  margin-top: 8px;
-  text-align: center;
-  font-size: 13px;
-  color: gray;
-}
-.breadcrumbsText {
-  color: var(--color-999);
-  font-size: 15px;
-  &.active {
-    color: var(--v-primary-base);
-    cursor: pointer;
-  }
-}
-::-webkit-scrollbar {
-  width: 0;
-  height: 0;
-}
-::-webkit-scrollbar-thumb, .temporaryAdd ::-webkit-scrollbar-thumb, .details_edit ::-webkit-scrollbar-thumb {
-  // 滚动条-颜色
-  background: #c3c3c379;
-}
-::-webkit-scrollbar-track, .temporaryAdd ::-webkit-scrollbar-track, .details_edit ::-webkit-scrollbar-track {
-  // 滚动条-底色
-  background: #e5e5e58f;
-}
-</style>