|
@@ -1,387 +1,118 @@
|
|
|
<template>
|
|
|
- <ion-page class="list-page">
|
|
|
- <ion-header class="header-theme2">
|
|
|
+ <ion-page class="list-page">
|
|
|
+ <ion-header class="header-theme2">
|
|
|
<ion-toolbar>
|
|
|
<ion-buttons slot="start">
|
|
|
- <ion-icon :icon="arrowBackOutline" @click="onBack" style="padding-left:10px;width:24px;height:24px;"></ion-icon>
|
|
|
+ <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
|
|
|
</ion-buttons>
|
|
|
- <ion-title>岗位推荐</ion-title>
|
|
|
+ <ion-title>岗位详情信息</ion-title>
|
|
|
</ion-toolbar>
|
|
|
</ion-header>
|
|
|
<ion-content>
|
|
|
- <ion-list>
|
|
|
- <ion-grid style="border:none;border-bottom: 1px solid black;margin:0px 15px 5px 15px;padding:0px;">
|
|
|
- <ion-row>
|
|
|
- <ion-col size="8">
|
|
|
- <ion-label style="font-size:20px;font-weight:bold;">{{ dataModel.name }}</ion-label>
|
|
|
- <p style="font-size: 14px;">
|
|
|
- 意向岗位:{{ dataModel.postNames }}
|
|
|
- </p>
|
|
|
- </ion-col>
|
|
|
- <ion-col size="4" style="display:flex;align-items: center;justify-content: right;overflow: hidden;">
|
|
|
- <ion-label>
|
|
|
- <div>
|
|
|
- <ion-label style="text-align:left;color:#3a7be0;">◆</ion-label>
|
|
|
- <ion-label>正在跟进</ion-label>
|
|
|
- </div>
|
|
|
- <p style="margin-top: 10px;">
|
|
|
- 已推荐数量:{{ dataModel.recommendedCount }}
|
|
|
- </p>
|
|
|
- </ion-label>
|
|
|
- </ion-col>
|
|
|
- </ion-row>
|
|
|
- </ion-grid>
|
|
|
- </ion-list>
|
|
|
- <ion-item style="border: 1px solid #a0a0a0;margin:0px 10px 10px 10px;border-radius: 12px;"
|
|
|
- v-for="(record,key) in recommendPostList" :key="key" detail>
|
|
|
- <ion-row style="width: 100%;">
|
|
|
- <ion-col size="10">
|
|
|
- <ion-grid>
|
|
|
- <ion-row>
|
|
|
- <ion-col>
|
|
|
- <ion-label style="display: flex;justify-content: space-between;">
|
|
|
- <ion-text>
|
|
|
- {{ record.postName }}
|
|
|
- </ion-text>
|
|
|
- </ion-label>
|
|
|
- </ion-col>
|
|
|
- </ion-row>
|
|
|
- <ion-row>
|
|
|
- <ion-col>
|
|
|
- <ion-label>
|
|
|
- <p>
|
|
|
- {{ record.companyName }}
|
|
|
- </p>
|
|
|
- </ion-label>
|
|
|
- </ion-col>
|
|
|
- </ion-row>
|
|
|
- <ion-row>
|
|
|
- <ion-col>
|
|
|
- <ion-label style="display: flex;justify-content: space-between;">
|
|
|
- <p>
|
|
|
- 参保人数:{{ record.insuredCount }}人
|
|
|
- </p>
|
|
|
- <p>
|
|
|
- 招聘人数:{{ record.recruitCount }}人
|
|
|
- </p>
|
|
|
- </ion-label>
|
|
|
- </ion-col>
|
|
|
- </ion-row>
|
|
|
- </ion-grid>
|
|
|
- </ion-col>
|
|
|
- <ion-col size="2" style="display: flex;align-items: center;justify-content: right;">
|
|
|
- <a @click="onCommend(record)" style="font-size: 13px;">{{ record.isRead==true?"已推荐":"推荐" }}</a>
|
|
|
- </ion-col>
|
|
|
- </ion-row>
|
|
|
- </ion-item>
|
|
|
- <b-empty v-if="recommendPostList.length<=0" :loading="formStatus.loading"/>
|
|
|
- <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
|
|
|
- <ion-infinite-scroll-content
|
|
|
- :loadingText="formStatus.total>pageParams.pageIndex*pageParams.pageSize?'正在加载...':'暂无更多'"
|
|
|
- loadingSpinner="bubbles">
|
|
|
- </ion-infinite-scroll-content>
|
|
|
- </ion-infinite-scroll>
|
|
|
- </ion-content>
|
|
|
- <ion-footer>
|
|
|
- <ion-toolbar>
|
|
|
- <div slot="end">
|
|
|
- <ion-button shape="round" expand="block" @click="onAllRecommend">全部推荐</ion-button>
|
|
|
+ <div class="bw-vue-form">
|
|
|
+ <div class="form-title">岗位详情</div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>企业</ion-label>
|
|
|
+ <ion-text>{{ dataModel.companyName }}</ion-text>
|
|
|
</div>
|
|
|
- </ion-toolbar>
|
|
|
- </ion-footer>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>岗位名称</ion-label>
|
|
|
+ <ion-text>{{ dataModel.professionName }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>招聘人数</ion-label>
|
|
|
+ <ion-text>{{ dataModel.recruitCount }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>招聘日期</ion-label>
|
|
|
+ <ion-text>{{ dayjs(dataModel.startTime).format("YYYY-MM-DD") }} - {{ dayjs(dataModel.endTime).format("YYYY-MM-DD") }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>招聘地点</ion-label>
|
|
|
+ <ion-text>{{ dataModel.jobPlace }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>岗位月薪(元)</ion-label>
|
|
|
+ <ion-text>{{ dataModel.minSalary }}至{{ dataModel.maxSalary }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>是否有试用期</ion-label>
|
|
|
+ <ion-text>{{ dataModel.isTrail ? '是':'否' }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>试用期(月)</ion-label>
|
|
|
+ <ion-text>{{ dataModel.trailMonths }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>试用期月薪(元)</ion-label>
|
|
|
+ <ion-text>{{ dataModel.trailMinSalary }}至{{ dataModel.maxSalary }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>工作年限要求</ion-label>
|
|
|
+ <ion-text>{{ dataModel.workYearStr }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>学历要求</ion-label>
|
|
|
+ <ion-text>{{ dataModel.cultureLevelName }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>福利待遇</ion-label>
|
|
|
+ <ion-text>{{ dataModel.welfare }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>其他要求</ion-label>
|
|
|
+ <ion-text>{{ dataModel.postDesc }}</ion-text>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </ion-content>
|
|
|
</ion-page>
|
|
|
</template>
|
|
|
+
|
|
|
<script lang="ts">
|
|
|
-import {arrowBackOutline,addCircleOutline} from 'ionicons/icons';
|
|
|
-import {reactive,defineComponent,ref} from "vue";
|
|
|
-import {useRoute, useRouter} from "vue-router";
|
|
|
-import {getJobUserById,getUserHuntList} from "@/api/jobUserInfo";
|
|
|
-import {getCommendPostList,saveCommendPost,saveCommendPostList} from "@/api/post";
|
|
|
-import {alertController, onIonViewDidEnter} from "@ionic/vue";
|
|
|
+import {defineComponent, reactive, ref, toRefs} from 'vue';
|
|
|
import dayjs from "dayjs";
|
|
|
-import {useUserStore} from "@/store/modules/user";
|
|
|
-
|
|
|
-interface SelectProps {
|
|
|
- name: string,
|
|
|
- value: string
|
|
|
-}
|
|
|
-interface PostModel{
|
|
|
- postName: string,
|
|
|
- postID: number
|
|
|
-}
|
|
|
-
|
|
|
-interface UserInfoModel {
|
|
|
- jobUserID:string,
|
|
|
- name:string,
|
|
|
- postNames:string,
|
|
|
- recommendedCount:number
|
|
|
-}
|
|
|
+import {useRoute, useRouter} from "vue-router";
|
|
|
+import {arrowBackOutline} from 'ionicons/icons';
|
|
|
+import {getPostByID} from '@/api/post/index'
|
|
|
+import {onIonViewDidEnter} from "@ionic/vue";
|
|
|
|
|
|
-interface RecommendModel{
|
|
|
- recommendID:string,
|
|
|
- jobUserID:string,
|
|
|
- postID:string,
|
|
|
- postName:string,
|
|
|
- companyName:string,
|
|
|
- insuredCount:number,
|
|
|
- recruitCount:number,
|
|
|
- isRead:boolean
|
|
|
+interface FormData{
|
|
|
+ dataModel:any
|
|
|
}
|
|
|
|
|
|
export default defineComponent({
|
|
|
- name: 'postDetail',
|
|
|
+ name: "PostDetail",
|
|
|
setup() {
|
|
|
+ const loading = ref(true);
|
|
|
+ const formData = reactive<FormData>({
|
|
|
+ dataModel: {}
|
|
|
+ });
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
- const curUserID = ref("");
|
|
|
- const editForm = ref();
|
|
|
- const commendStr = ref("推荐");
|
|
|
- const dataModel = ref<UserInfoModel>({
|
|
|
- jobUserID:'',
|
|
|
- name:'',
|
|
|
- postNames:'',
|
|
|
- recommendedCount:0
|
|
|
- });
|
|
|
- const huntJobList = ref<PostModel[]>([]);
|
|
|
- const recommendPostList = ref<RecommendModel[]>([]);
|
|
|
- const pageParams = reactive({
|
|
|
- pageIndex: 1,
|
|
|
- pageSize: 7,
|
|
|
- jobUserID:null
|
|
|
- });
|
|
|
- const formStatus = reactive({
|
|
|
- total:0,
|
|
|
- loading:false
|
|
|
- });
|
|
|
-
|
|
|
- const presentAlert = async (title:string,message: string) => {
|
|
|
- const alert = await alertController.create({
|
|
|
- header: title,
|
|
|
- message: message,
|
|
|
- buttons: [
|
|
|
- '确定'
|
|
|
- ],
|
|
|
- });
|
|
|
-
|
|
|
- await alert.present();
|
|
|
+ const loadData = async function (id: any) {
|
|
|
+ loading.value = true;
|
|
|
+ getPostByID(id).then((data) => {
|
|
|
+ formData.dataModel = data;
|
|
|
+ })
|
|
|
+ loading.value = false;
|
|
|
}
|
|
|
|
|
|
const onBack = () => {
|
|
|
- router.push("./recommend");
|
|
|
- }
|
|
|
-
|
|
|
- const onCommend = async function (item:any){
|
|
|
- if(item.isRead){
|
|
|
- await presentAlert("提示","已推荐该岗位!");
|
|
|
- return null;}
|
|
|
- const saveData = {recommendID:item.recommendID,jobUserID:dataModel.value.jobUserID,postID:item.postID,isRead:1}
|
|
|
- await saveCommendPost(saveData);
|
|
|
- reload(dataModel.value.jobUserID);
|
|
|
- }
|
|
|
-
|
|
|
- const onAllRecommend = async function(){
|
|
|
- const finallyList = ref<any[]>([]);
|
|
|
- if(recommendPostList.value.length<1){
|
|
|
- await presentAlert("提示:","暂无可供推荐的岗位!")
|
|
|
- return null;
|
|
|
- }else{
|
|
|
- for(let i=0;i < recommendPostList.value.length;i++){
|
|
|
- if(!recommendPostList.value[i].isRead){
|
|
|
- const saveData = {recommendID:recommendPostList.value[i].recommendID,jobUserID:recommendPostList.value[i].jobUserID,postID:recommendPostList.value[i].postID,isRead:1}
|
|
|
- finallyList.value.push(saveData);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if(finallyList.value.length>0){
|
|
|
- await saveCommendPostList(finallyList.value);
|
|
|
- reload(dataModel.value.jobUserID);
|
|
|
- }else{
|
|
|
- await presentAlert("提示:","所有岗位都已推荐给该求职人!")
|
|
|
- return null;
|
|
|
- }
|
|
|
+ router.push({path: './list', query: {}});
|
|
|
}
|
|
|
|
|
|
- const onScroll = (e: any) => {
|
|
|
- setTimeout(() => {
|
|
|
- e.target.complete();
|
|
|
- if (formStatus.total > pageParams.pageIndex * pageParams.pageSize) {
|
|
|
- pageParams.pageSize += 10;
|
|
|
- loadData(pageParams);
|
|
|
- }
|
|
|
- }, 500);
|
|
|
- }
|
|
|
-
|
|
|
- const onFinish = () => {
|
|
|
- router.push("./list");
|
|
|
- }
|
|
|
-
|
|
|
- const getCurHuntList = async function(jobUserID:any){
|
|
|
- const huntJobResult :any = await getUserHuntList(jobUserID);
|
|
|
- huntJobList.value = huntJobResult == null? []:huntJobResult;
|
|
|
- console.log("huntJobList",huntJobList.value);
|
|
|
- /*处理意向岗位显示*/
|
|
|
- dataModel.value.postNames = '';
|
|
|
- if(huntJobList.value && huntJobList.value.length>0){
|
|
|
- for(let i=0;i<huntJobList.value.length;i++){
|
|
|
- if(i<huntJobList.value.length-1){
|
|
|
- dataModel.value.postNames += huntJobList.value[i].postName+",";
|
|
|
- }else{
|
|
|
- dataModel.value.postNames += huntJobList.value[i].postName;
|
|
|
- }
|
|
|
- }
|
|
|
- }else{
|
|
|
- dataModel.value.postNames ='暂无';
|
|
|
- }
|
|
|
- }
|
|
|
- const getCurCommendPostList = async function(searchParams:any){
|
|
|
- const huntPostResult :any = await getCommendPostList(searchParams);
|
|
|
- recommendPostList.value = huntPostResult.list;
|
|
|
- console.log("recommendPostList",recommendPostList.value);
|
|
|
- }
|
|
|
- const loadData = async (jobUserID: any) => {
|
|
|
- formStatus.loading = true;
|
|
|
- recommendPostList.value = [];
|
|
|
- /*查询求职人员信息*/
|
|
|
- const loginUserInfo = useUserStore().getUserInfo;
|
|
|
- curUserID.value = loginUserInfo.userID == undefined?"":loginUserInfo.userID;
|
|
|
- const userInfo :any = await getJobUserById(jobUserID,curUserID.value);
|
|
|
- dataModel.value = userInfo;
|
|
|
- /*查询求职意向信息*/
|
|
|
- await getCurHuntList(jobUserID);
|
|
|
- console.log("当前dataModel",dataModel.value);
|
|
|
- /*查询推荐岗位信息*/
|
|
|
- pageParams.jobUserID = jobUserID;
|
|
|
- await getCurCommendPostList(pageParams);
|
|
|
- formStatus.total = recommendPostList.value.length;
|
|
|
- formStatus.loading = false;
|
|
|
- };
|
|
|
-
|
|
|
-
|
|
|
- const reload = (jobUserID:any) => {
|
|
|
- pageParams.pageIndex = 1;
|
|
|
- loadData(jobUserID);
|
|
|
- }
|
|
|
-
|
|
|
- onIonViewDidEnter(() => {
|
|
|
- if (route.query.reload)
|
|
|
- reload(route.query.jobUserID);
|
|
|
+ onIonViewDidEnter(()=>{
|
|
|
+ loadData(route.query.id);
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
+ ...toRefs(formData),
|
|
|
arrowBackOutline,
|
|
|
- addCircleOutline,
|
|
|
+ dayjs,
|
|
|
route,
|
|
|
- router,
|
|
|
- editForm,
|
|
|
- dataModel,
|
|
|
- huntJobList,
|
|
|
- recommendPostList,
|
|
|
- pageParams,
|
|
|
- formStatus,
|
|
|
- commendStr,
|
|
|
- onCommend,
|
|
|
- onAllRecommend,
|
|
|
- onBack,
|
|
|
- onFinish,
|
|
|
- onScroll,
|
|
|
loadData,
|
|
|
- getCurHuntList,
|
|
|
- reload,
|
|
|
- dayjs
|
|
|
+ onBack
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
-</script>
|
|
|
-<style lang="less">
|
|
|
-.next-btn {
|
|
|
- width: 80px;
|
|
|
- border-radius: 5px;
|
|
|
- background-color:#3a7be0;
|
|
|
- color: #363432;
|
|
|
- font-size: 14px;
|
|
|
-}
|
|
|
-
|
|
|
-.iconBtn{
|
|
|
- width:24px;
|
|
|
- height:24px;
|
|
|
-}
|
|
|
-
|
|
|
-.stepFlex {
|
|
|
- margin: 0;
|
|
|
- display: flex;
|
|
|
- width: 100%;
|
|
|
-
|
|
|
- .stepFlex-item {
|
|
|
- position: relative;
|
|
|
- flex: 1;
|
|
|
- text-align: center;
|
|
|
- margin-top: -10px;
|
|
|
-
|
|
|
- .stepFlex-item-label {
|
|
|
- padding-top: 60px;
|
|
|
- font-size: 14px;
|
|
|
-
|
|
|
- .stepFlex-item-label-title{
|
|
|
- margin-top:30px;
|
|
|
- }
|
|
|
-
|
|
|
- .stepFlex-item-label-desc{
|
|
|
- margin-top:5px;color: #b9b9bd;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .greenCircle {
|
|
|
- top: calc(50% - 15px);
|
|
|
- left: calc(50% - 4px);
|
|
|
- position: absolute;
|
|
|
- z-index: 2;
|
|
|
- width: 10px;
|
|
|
- height: 10px;
|
|
|
- border-radius: 50%;
|
|
|
- background-color: #31A2FE;
|
|
|
- }
|
|
|
-
|
|
|
- .now {
|
|
|
- top: calc(50% - 18px);
|
|
|
- left: calc(50% - 8px);
|
|
|
- position: absolute;
|
|
|
- z-index: 3;
|
|
|
- width: 16px;
|
|
|
- height: 16px;
|
|
|
- border-radius: 50%;
|
|
|
- background-color: #31A2FE;
|
|
|
- border: 4px solid #c5e8f9;
|
|
|
- }
|
|
|
-
|
|
|
- .grayCircle {
|
|
|
- top: calc(50% - 15px);
|
|
|
- left: calc(50% - 4px);
|
|
|
- position: absolute;
|
|
|
- z-index: 2;
|
|
|
- width: 10px;
|
|
|
- height: 10px;
|
|
|
- border-radius: 50%;
|
|
|
- background-color: #ccc;
|
|
|
- }
|
|
|
-
|
|
|
- .greenLine {
|
|
|
- width: 100%;
|
|
|
- top: calc(50% - 11px);
|
|
|
- left: calc(50% - 2px);
|
|
|
- height: 2px;
|
|
|
- background-color: #31A2FE;
|
|
|
- position: absolute;
|
|
|
- }
|
|
|
-
|
|
|
- .grayLine {
|
|
|
- height: 0;
|
|
|
- border: 1px dashed #ccc;
|
|
|
- width: 100%;
|
|
|
- top: calc(50% - 11px);
|
|
|
- left: calc(50% - 2px);
|
|
|
- position: absolute;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-</style>
|
|
|
+</script>
|