|
@@ -14,6 +14,7 @@
|
|
|
<a-select
|
|
|
v-model:value="searchType"
|
|
|
style="width: 30%"
|
|
|
+ @change="searchTypeChange"
|
|
|
>
|
|
|
<a-select-option value="company">找企业</a-select-option>
|
|
|
<a-select-option value="post">找岗位</a-select-option>
|
|
@@ -72,8 +73,10 @@
|
|
|
</div>
|
|
|
<!-- 企业数据列表 -->
|
|
|
<div class="list-box">
|
|
|
+ <!-- 查询类型为企业,主要展示企业数据 -->
|
|
|
<div class="company-data-box" :class="{'check-company':nowCheckCompany.companyID == company.companyID}"
|
|
|
- v-if="companyList.length > 0" v-for="(company,index) in companyList" :key="index"
|
|
|
+ v-if="companyList.length > 0 && searchType == 'company'" v-for="(company,index) in companyList"
|
|
|
+ :key="index"
|
|
|
@click="checkCompanyChange(company)">
|
|
|
<p class="company-name">
|
|
|
{{ company.companyName }}
|
|
@@ -96,9 +99,9 @@
|
|
|
<span v-if="company.postList.length == 0" style="width: 25px;flex: 0 0 auto">暂无</span>
|
|
|
</div>
|
|
|
<!-- 标签 -->
|
|
|
- <div class="company-label-box" v-if="company.labelList && company.labelList.length > 0"
|
|
|
+ <div class="company-label-box" v-if="company.companyLabelList && company.companyLabelList.length > 0"
|
|
|
:ref="el => companyLabelBoxRef[index] = el" :class="{'label-box-max-height': company.labelExpanded}">
|
|
|
- <a-tag v-for="(label, labelIndex) in company.labelList" :key="labelIndex">
|
|
|
+ <a-tag v-for="(label, labelIndex) in company.companyLabelList" :key="labelIndex">
|
|
|
{{ label.labelName }}
|
|
|
</a-tag>
|
|
|
<div v-if="showLaunchBtnBox(companyLabelBoxRef,index,50)">
|
|
@@ -108,7 +111,38 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-else class="empty-box">
|
|
|
+ <!-- 查询类型为岗位时,主要展示岗位数据 -->
|
|
|
+ <div v-if="companyList.length>0 && searchType == 'post'"
|
|
|
+ v-for="(postCompany, postCompanyIndex) in companyList" :key="postCompanyIndex"
|
|
|
+ class="company-data-box"
|
|
|
+ @click="checkCompanyChange(postCompany)">
|
|
|
+ <div class="post-title">
|
|
|
+ <span>{{ postCompany.professionName }}({{ postCompany.recruitCount }}人)</span>
|
|
|
+ <span>{{ showSalary(postCompany.minSalary, postCompany.maxSalary) }}</span>
|
|
|
+ </div>
|
|
|
+ <p class="label-text">
|
|
|
+ 招聘企业:{{ postCompany.companyName }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 工作地点:{{ postCompany.companyAddress }}
|
|
|
+ </p>
|
|
|
+ <!-- 标签 -->
|
|
|
+ <div class="company-label-box"
|
|
|
+ v-if="postCompany.postLabelList && postCompany.postLabelList.length > 0"
|
|
|
+ :ref="el => companyPostLabelBoxRef[postCompanyIndex] = el"
|
|
|
+ :class="{'label-box-max-height': postCompany.labelExpanded}">
|
|
|
+ <a-tag v-for="(label, labelIndex) in postCompany.postLabelList" :key="labelIndex">
|
|
|
+ {{ label.labelName }}
|
|
|
+ </a-tag>
|
|
|
+ <div v-if="showLaunchBtnBox(companyPostLabelBoxRef,postCompanyIndex,50)">
|
|
|
+ <span class="launch-btn" v-if="postCompany.labelExpanded"
|
|
|
+ @click.stop="postCompany.labelExpanded = false">展开</span>
|
|
|
+ <span class="launch-btn" v-else @click.stop="postCompany.labelExpanded = true">收起</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 空数据状态 -->
|
|
|
+ <div v-if="companyList.length == 0" class="empty-box">
|
|
|
<a-empty/>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -121,85 +155,136 @@
|
|
|
</div>
|
|
|
<!-- 岗位信息 -->
|
|
|
<div class="post-box" v-if="nowCheckCompany.companyID">
|
|
|
- <p class="title label-text">企业详情</p>
|
|
|
- <!-- 企业信息 -->
|
|
|
- <div class="post-company-box">
|
|
|
- <p class="company-name">
|
|
|
- {{ nowCheckCompany.companyName }}
|
|
|
- </p>
|
|
|
- <p class="label-text">
|
|
|
- 工作地点:{{ nowCheckCompany.companyAddress }}
|
|
|
- </p>
|
|
|
- <p class="label-text">
|
|
|
- 企业规模:{{ nowCheckCompany.companyModelType }}
|
|
|
- </p>
|
|
|
- <p class="label-text">
|
|
|
- 企业状态:{{ nowCheckCompany.recordStatusName }}
|
|
|
- </p>
|
|
|
- <!-- 标签 -->
|
|
|
- <div class="company-label-box" v-if="nowCheckCompany.labelList && nowCheckCompany.labelList.length > 0"
|
|
|
- :ref="el => postBoxCompanyLabelBoxRef = el"
|
|
|
- :class="{'label-box-max-height': postBoxCompanyLabelExpanded}">
|
|
|
- <a-tag v-for="(label, index) in nowCheckCompany.labelList" :key="index">
|
|
|
- {{ label.labelName }}
|
|
|
- </a-tag>
|
|
|
- <div v-if="showLaunchBtnBox(postBoxCompanyLabelBoxRef, null, 50)">
|
|
|
+ <div v-if="searchType == 'company'" style="width: 100%; height: 100%;">
|
|
|
+ <p class="title label-text">企业详情</p>
|
|
|
+ <!-- 企业信息 -->
|
|
|
+ <div class="post-company-box">
|
|
|
+ <p class="company-name">
|
|
|
+ {{ nowCheckCompany.companyName }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 工作地点:{{ nowCheckCompany.companyAddress }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 企业规模:{{ nowCheckCompany.companyModelType }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 企业状态:{{ nowCheckCompany.recordStatusName }}
|
|
|
+ </p>
|
|
|
+ <!-- 标签 -->
|
|
|
+ <div class="company-label-box"
|
|
|
+ v-if="nowCheckCompany.companyLabelList && nowCheckCompany.companyLabelList.length > 0"
|
|
|
+ :ref="el => postBoxCompanyLabelBoxRef = el"
|
|
|
+ :class="{'label-box-max-height': postBoxCompanyLabelExpanded}">
|
|
|
+ <a-tag v-for="(label, index) in nowCheckCompany.companyLabelList" :key="index">
|
|
|
+ {{ label.labelName }}
|
|
|
+ </a-tag>
|
|
|
+ <div v-if="showLaunchBtnBox(postBoxCompanyLabelBoxRef, null, 50)">
|
|
|
<span class="launch-btn" v-if="postBoxCompanyLabelExpanded"
|
|
|
@click.stop="postBoxCompanyLabelExpanded = false">展开</span>
|
|
|
- <span class="launch-btn" v-else @click.stop="postBoxCompanyLabelExpanded = true">收起</span>
|
|
|
+ <span class="launch-btn" v-else @click.stop="postBoxCompanyLabelExpanded = true">收起</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 岗位列表 -->
|
|
|
+ <div class="list-box">
|
|
|
+ <div class="list-post-box" v-if="postList.length > 0" v-for="(post, postIndex) in postList"
|
|
|
+ :key="postIndex">
|
|
|
+ <div class="post-title">
|
|
|
+ <span>{{ post.professionName }}</span>
|
|
|
+ <span>{{ showSalary(post.minSalary, post.maxSalary) }}</span>
|
|
|
+ </div>
|
|
|
+ <p class="label-text">
|
|
|
+ 招聘人数:{{ post.recruitCount }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 招聘日期:
|
|
|
+ {{ dayjs(post.startTime).format("YYYY-MM-DD") }}
|
|
|
+ 至
|
|
|
+ {{ dayjs(post.endTime).format("YYYY-MM-DD") }}
|
|
|
+ </p>
|
|
|
+ <!-- 岗位要求 -->
|
|
|
+ <div class="post-desc-box">
|
|
|
+ <div class="label-text post-desc" :ref="el => postDescBoxRef[postIndex] = el"
|
|
|
+ :class="{'post-desc-max-height': post.descExpanded}">
|
|
|
+ 岗位要求:{{ post.postDesc }}
|
|
|
+ </div>
|
|
|
+ <div v-if="showLaunchBtnBox(postDescBoxRef,postIndex,35)">
|
|
|
+ <span class="launch-btn" v-if="post.descExpanded"
|
|
|
+ @click.stop="post.descExpanded = false">展开</span>
|
|
|
+ <span class="launch-btn " v-else @click.stop="post.descExpanded = true">收起</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 标签 -->
|
|
|
+ <div class="company-label-box" v-if="post.labelList && post.labelList.length > 0"
|
|
|
+ :ref="el => postLabelBoxRef[postIndex] = el" :class="{'label-box-max-height': post.labelExpanded}">
|
|
|
+ <a-tag v-for="(label, labelIndex) in post.labelList" :key="labelIndex">
|
|
|
+ {{ label.labelName }}
|
|
|
+ </a-tag>
|
|
|
+ <div v-if="showLaunchBtnBox(postLabelBoxRef,postIndex,50)">
|
|
|
+ <span class="launch-btn" v-if="post.labelExpanded"
|
|
|
+ @click.stop="post.labelExpanded = false">展开</span>
|
|
|
+ <span class="launch-btn" v-else @click.stop="post.labelExpanded = true">收起</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ <div v-else class="empty-box">
|
|
|
+ <a-empty/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 分页控件 -->
|
|
|
+ <div class="pagination-box">
|
|
|
+ <a-pagination v-model:current="postSearchParams.pageIndex" :total="postTotal"
|
|
|
+ v-model:pageSize="postSearchParams.pageSize"
|
|
|
+ show-less-items @change="postPaginationChange" simple :show-size-changer="false"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- 岗位列表 -->
|
|
|
- <div class="list-box">
|
|
|
- <div class="list-post-box" v-if="postList.length > 0" v-for="(post, postIndex) in postList" :key="postIndex">
|
|
|
+ <div v-if="searchType == 'post'" style="width: 100%; height: 100%;">
|
|
|
+ <p class="title label-text">岗位详情</p>
|
|
|
+ <div class="post-company-box" style="max-height: 100%">
|
|
|
<div class="post-title">
|
|
|
- <span>{{ post.professionName }}</span>
|
|
|
- <span>{{ showSalary(post.minSalary, post.maxSalary) }}</span>
|
|
|
+ <span>{{ nowCheckCompany.professionName }}</span>
|
|
|
+ <span>{{ showSalary(nowCheckCompany.minSalary, nowCheckCompany.maxSalary) }}</span>
|
|
|
</div>
|
|
|
<p class="label-text">
|
|
|
- 招聘人数:{{ post.recruitCount }}
|
|
|
+ 招聘企业:{{ nowCheckCompany.companyName }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 工作地点:{{ nowCheckCompany.companyAddress }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 联系人:{{ nowCheckCompany.contactName }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 联系电话:{{ nowCheckCompany.contactMobile }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 学历要求:{{ nowCheckCompany.cultureLevelName }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 招聘人数:{{ nowCheckCompany.recruitCount }}人
|
|
|
</p>
|
|
|
<p class="label-text">
|
|
|
招聘日期:
|
|
|
- {{ dayjs(post.startTime).format("YYYY-MM-DD") }}
|
|
|
+ {{ dayjs(nowCheckCompany.startTime).format("YYYY-MM-DD") }}
|
|
|
至
|
|
|
- {{ dayjs(post.endTime).format("YYYY-MM-DD") }}
|
|
|
+ {{ dayjs(nowCheckCompany.EndTime).format("YYYY-MM-DD") }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 福利待遇:{{ nowCheckCompany.welfare }}
|
|
|
+ </p>
|
|
|
+ <p class="label-text">
|
|
|
+ 其他要求:{{ nowCheckCompany.postDesc }}
|
|
|
</p>
|
|
|
- <!-- 岗位要求 -->
|
|
|
- <div class="post-desc-box">
|
|
|
- <div class="label-text post-desc" :ref="el => postDescBoxRef[postIndex] = el"
|
|
|
- :class="{'post-desc-max-height': post.descExpanded}">
|
|
|
- 岗位要求:{{ post.postDesc }}
|
|
|
- </div>
|
|
|
- <div v-if="showLaunchBtnBox(postDescBoxRef,postIndex,35)">
|
|
|
- <span class="launch-btn" v-if="post.descExpanded"
|
|
|
- @click.stop="post.descExpanded = false">展开</span>
|
|
|
- <span class="launch-btn " v-else @click.stop="post.descExpanded = true">收起</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
<!-- 标签 -->
|
|
|
- <div class="company-label-box" v-if="post.labelList && post.labelList.length > 0"
|
|
|
- :ref="el => postLabelBoxRef[postIndex] = el" :class="{'label-box-max-height': post.labelExpanded}">
|
|
|
- <a-tag v-for="(label, labelIndex) in post.labelList" :key="labelIndex">
|
|
|
+ <div class="company-label-box"
|
|
|
+ v-if="nowCheckCompany.postLabelList && nowCheckCompany.postLabelList.length > 0"
|
|
|
+ >
|
|
|
+ <a-tag v-for="(label, index) in nowCheckCompany.postLabelList" :key="index">
|
|
|
{{ label.labelName }}
|
|
|
</a-tag>
|
|
|
- <div v-if="showLaunchBtnBox(postLabelBoxRef,postIndex,50)">
|
|
|
- <span class="launch-btn" v-if="post.labelExpanded"
|
|
|
- @click.stop="post.labelExpanded = false">展开</span>
|
|
|
- <span class="launch-btn" v-else @click.stop="post.labelExpanded = true">收起</span>
|
|
|
- </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-else class="empty-box">
|
|
|
- <a-empty/>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- 分页控件 -->
|
|
|
- <div class="pagination-box">
|
|
|
- <a-pagination v-model:current="postSearchParams.pageIndex" :total="postTotal"
|
|
|
- v-model:pageSize="postSearchParams.pageSize"
|
|
|
- show-less-items @change="postPaginationChange" simple :show-size-changer="false"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -211,7 +296,6 @@ import {onMounted, reactive, ref} from "vue";
|
|
|
import huiZhouGeoJSON from "./geo"
|
|
|
import {getPosition, setBoundary} from "@/utils/position";
|
|
|
import redThIcon from "@/assets/images/redTh.png"
|
|
|
-import thIcon from "@/assets/images/th.jpg"
|
|
|
import {message, type SelectProps} from "ant-design-vue";
|
|
|
import {getSysDictionaryList} from "@/api/system/dictionary";
|
|
|
import {getSiteList} from "@/api/baseSettings/siteInfo";
|
|
@@ -225,14 +309,12 @@ const zoom = 9;
|
|
|
let map = null;
|
|
|
// 地图标记点
|
|
|
let markerList = new Array<any>([]);
|
|
|
-// 地图标记点文本
|
|
|
-let labelList = new Array<any>([]);
|
|
|
// 查询类型
|
|
|
const searchType = ref("company")
|
|
|
// 企业查询条件
|
|
|
const companySearchParam = reactive({
|
|
|
pageIndex: 1,
|
|
|
- pageSize: 5,
|
|
|
+ pageSize: 50,
|
|
|
companyName: "",
|
|
|
maxDistance: 5,
|
|
|
companyModel: undefined,
|
|
@@ -246,18 +328,11 @@ const companyList = ref<Array<any>>([])
|
|
|
// 企业分页条数
|
|
|
const companyTotal = ref(0);
|
|
|
// 当前选中的企业
|
|
|
-const nowCheckCompany = ref({
|
|
|
- companyID: "",
|
|
|
- companyName: "",
|
|
|
- companyAddress: "",
|
|
|
- companyModelType: "",
|
|
|
- recordStatusName: "",
|
|
|
- labelList: new Array<any>()
|
|
|
-})
|
|
|
+const nowCheckCompany = ref<any>({})
|
|
|
// 岗位查询条件
|
|
|
const postSearchParams = reactive({
|
|
|
pageIndex: 1,
|
|
|
- pageSize: 5,
|
|
|
+ pageSize: 20,
|
|
|
})
|
|
|
// 当前选中的企业岗位列表
|
|
|
const postList = ref<Array<any>>([]);
|
|
@@ -280,6 +355,8 @@ const regionList = ref<SelectProps['options']>();
|
|
|
const searchLoading = ref(false);
|
|
|
// 企业信息标签box ref
|
|
|
const companyLabelBoxRef = ref<Array<any>>([]);
|
|
|
+// 企业信息-岗位标签box ref
|
|
|
+const companyPostLabelBoxRef = ref<Array<any>>([])
|
|
|
// 岗位面板企业信息的标签盒子ref
|
|
|
const postBoxCompanyLabelBoxRef = ref<any>(null);
|
|
|
// 岗位面板企业信息的标签展开与收起开关
|
|
@@ -333,7 +410,7 @@ function searchAll() {
|
|
|
companySearchParam.regionCode = undefined;
|
|
|
companySearchParam.maxDistance = null;
|
|
|
companySearchParam.pageIndex = 1;
|
|
|
- companySearchParam.pageSize = 5;
|
|
|
+ companySearchParam.pageSize = 50;
|
|
|
onSearch();
|
|
|
}
|
|
|
|
|
@@ -342,7 +419,8 @@ function findFuncThen(result: any) {
|
|
|
companyList.value = result.list;
|
|
|
// 处理标签和岗位JSON数据
|
|
|
companyList.value.forEach((item: any) => {
|
|
|
- item.labelList = JSON.parse(item.labelList || '[]')
|
|
|
+ item.companyLabelList = JSON.parse(item.companyLabelList || '[]')
|
|
|
+ item.postLabelList = JSON.parse(item.postLabelList || '[]')
|
|
|
item.postList = JSON.parse(item.postList || '[]')
|
|
|
item.labelExpanded = true;
|
|
|
});
|
|
@@ -416,13 +494,31 @@ function setCompanyMarker() {
|
|
|
iconSize: new T.Point(30, 30),
|
|
|
iconAnchor: new T.Point(15, 30)
|
|
|
})
|
|
|
+ let uniqueCompanyList = companyList.value;
|
|
|
+ if (searchType.value == 'post') {
|
|
|
+ // 岗位查询时,会出现多个岗位相同公司,按公司的ID去重
|
|
|
+ const processedCompanyIDs = new Set();
|
|
|
+ // 过滤出唯一的公司列表
|
|
|
+ uniqueCompanyList = companyList.value.filter((item: any) => {
|
|
|
+ if (!processedCompanyIDs.has(item.companyID)) {
|
|
|
+ processedCompanyIDs.add(item.companyID);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
// 解析企业数据,在地图中标记
|
|
|
- companyList.value.forEach((item: any) => {
|
|
|
+ uniqueCompanyList.forEach((item: any) => {
|
|
|
if (item.longitude && item.latitude) {
|
|
|
const point = new T.LngLat(item.longitude, item.latitude)
|
|
|
const marker = new T.Marker(point, {
|
|
|
icon: icon
|
|
|
}); // 创建标注
|
|
|
+ // 给每个地图标点添加点击事件,打印item
|
|
|
+ marker.addEventListener('click', () => {
|
|
|
+ checkCompanyChange(item);
|
|
|
+ });
|
|
|
(map as any).addOverLay(marker);// 将标注添加到地图中
|
|
|
markerList.push(marker);
|
|
|
}
|
|
@@ -497,6 +593,12 @@ function showLaunchBtnBox(refValue: any, index: any, scrollHeight: any) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// 查询类型切换事件
|
|
|
+function searchTypeChange() {
|
|
|
+ // 清空数据
|
|
|
+ onSearch();
|
|
|
+}
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
initMap();
|
|
|
getCompanyModelList();
|
|
@@ -606,6 +708,13 @@ export default {
|
|
|
border-right: 1px solid rgba(173, 173, 173, 0.8);
|
|
|
}
|
|
|
|
|
|
+ .post-title {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ margin-bottom: 3px;
|
|
|
+ }
|
|
|
+
|
|
|
.company-box {
|
|
|
left: 0;
|
|
|
right: 300px;
|
|
@@ -668,12 +777,6 @@ export default {
|
|
|
padding: 8px;
|
|
|
border-bottom: 1px solid rgba(173, 173, 173, 0.8);
|
|
|
|
|
|
- .post-title {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- flex-wrap: wrap;
|
|
|
- }
|
|
|
-
|
|
|
.post-desc-box {
|
|
|
position: relative;
|
|
|
|