Browse Source

岗位详情

lizeyu 10 months ago
parent
commit
8501b00354

+ 2 - 2
h5app/src/router/index.ts

@@ -58,8 +58,8 @@ const routes: Array<RouteRecordRaw> = [
                 component: () => import('@/views/pages/jobhunt/recommend/list.vue')
             },
             {
-                path: 'tabMain/jobhunt/recommend/recommend',
-                component: () => import('@/views/pages/jobhunt/recommend/recommend.vue')
+                path: 'tabMain/jobhunt/recommend/recommendPost',
+                component: () => import('@/views/pages/jobhunt/recommend/recommendPost.vue')
             },
             {
                 path: 'tabMain/recommendMgt/list',

+ 1 - 1
h5app/src/views/pages/jobhunt/recommend/list.vue

@@ -123,7 +123,7 @@ export default defineComponent({
 
     const onRecommendJob = (item: any) => {
       router.push({
-        path: './recommend',
+        path: './recommendPost',
         query: {
           reload: 1,
           professionID: item.professionID,

+ 2 - 3
h5app/src/views/pages/jobhunt/recommend/recommend.vue

@@ -224,7 +224,7 @@ export default defineComponent({
     }
 
     const onBack = () => {
-      router.go(-1);
+      router.push({path: './list', query: {}});
     }
 
     const reload = () => {
@@ -254,6 +254,7 @@ export default defineComponent({
     }
 
     onIonViewDidEnter(() => {
+      getRecommendTypeList();
       reloadSearchParams();
       reload();
     });
@@ -279,8 +280,6 @@ export default defineComponent({
       onPopoverConfirm,
       onRestRecommendWhere,
     }
-  }, mounted() {
-    this.getRecommendTypeList()
   }
 });
 </script>

+ 85 - 354
h5app/src/views/pages/post/detail.vue

@@ -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>

+ 0 - 3
h5app/src/views/pages/post/edit.vue

@@ -271,7 +271,6 @@ export default defineComponent({
     const onSave = async function () {
       const isFormCorrect = await v$.value.$validate();
       if (!isFormCorrect) {
-        console.log("当前岗位信息", formState.dataModel);
         await presentAlert('请输入完整信息!');
         return null;
       }
@@ -294,12 +293,10 @@ export default defineComponent({
     const getWorkYearList = async function () {
       const data: any = await getSysDictionaryList("WorkYearType");
       workYearList.value = data;
-      console.log(workYearList.value);
     }
     const getCultureRankList = async function () {
       const data: any = await getSysDictionaryList("CultureLevel");
       cultureRankList.value = data;
-      console.log(cultureRankList.value);
     }
 
     const loadData = async (postID: any) => {

+ 8 - 8
h5app/src/views/pages/post/list.vue

@@ -24,7 +24,7 @@
       <div class="bw-vue-list">
         <div class="list-content">
           <ion-list>
-              <ion-item-sliding v-for="(record,key) in dataList" :key="key" detail>
+              <ion-item-sliding v-for="(record,key) in dataList" :key="key" detail @click="onDetail(record.postID)">
                 <ion-item>
                   <ion-label>
                     <h3>{{ record.professionName }}</h3>
@@ -48,10 +48,10 @@
                   </ion-avatar>
                 </ion-item>
                 <ion-item-options>
-                  <ion-item-option @click="onEdit(record.postID)">
+                  <ion-item-option @click="onEdit(record.postID);$event.preventDefault();$event.stopPropagation();">
                     <ion-icon :icon="buildOutline"></ion-icon>
                   </ion-item-option>
-                  <ion-item-option color="danger" @click="onDel(record.postID)">
+                  <ion-item-option color="danger" @click="onDel(record.postID);$event.preventDefault();$event.stopPropagation();">
                     <ion-icon :icon="trashOutline"></ion-icon>
                   </ion-item-option>
                 </ion-item-options>
@@ -105,7 +105,6 @@ export default defineComponent({
       getPostList(searchParams).then(data => {
         dataList.value = dataList.value.concat(data.list);
         total.value = data.total;
-        console.log(dataList.value);
       })
       loading.value = false;
     }
@@ -126,16 +125,16 @@ export default defineComponent({
       }, 500);
     }
 
-    const onDetail = () => {
-      router.push({path: './detail', query: {reload: 1, id: null, status: 1}});
+    const onDetail = (id: any) => {
+      router.push({path: './detail', query: {reload: 1, id: id, status: 1}});
     }
 
     const onAdd = () => {
       router.push({path: './edit', query: {reload: 1, id: null, status: 1}});
     }
 
-    const onEdit = (postID: string) => {
-      router.push({path: './edit', query: {reload: 1, id: postID, status: 2}});
+    const onEdit = (id: string) => {
+      router.push({path: './edit', query: {reload: 1, id: id, status: 2}});
     }
 
     const onDel = async (id: any) => {
@@ -200,6 +199,7 @@ export default defineComponent({
       dataList,
       pagination,
       searchParams,
+      onDetail,
       onBack,
       onAdd,
       onEdit,

+ 7 - 4
h5app/src/views/pages/recommendMgt/detail.vue

@@ -64,6 +64,7 @@ import dayjs from "dayjs";
 import {useRoute, useRouter} from "vue-router";
 import {arrowBackOutline} from 'ionicons/icons';
 import {getListById, setEntryState} from '@/api/recommendmgt/index'
+import {onIonViewDidEnter} from '@ionic/vue'
 
 interface RecommendModel {
   companyMobile: string,
@@ -128,14 +129,18 @@ export default defineComponent({
 
     const onSetEntryState = async (recommendMgtID: any, entryState: any) => {
       setEntryState({recommendMgtID: recommendMgtID, entryState: entryState}).then(() => {
-        loadData(route.query.recommendMgtID);
+        loadData(route.query.id);
       });
     }
 
     const onBack = () => {
-      router.push({path: './list', query: {reload: 1}});
+      router.push({path: './list', query: {}});
     }
 
+    onIonViewDidEnter (()=>{
+      loadData(route.query.id);
+    })
+
     return {
       dataModel,
       arrowBackOutline,
@@ -145,8 +150,6 @@ export default defineComponent({
       onSetEntryState,
       onBack
     }
-  }, created() {
-    this.loadData(this.route.query.recommendMgtID);
   }
 });
 </script>

+ 2 - 2
h5app/src/views/pages/recommendMgt/list.vue

@@ -107,8 +107,8 @@ export default defineComponent({
       }, 500);
     }
 
-    const onDetail = (recommendMgtID: any) => {
-      router.push({path: './detail', query: {reload: 1, id: recommendMgtID, status: 1}});
+    const onDetail = (id: any) => {
+      router.push({path: './detail', query: {reload: 1, id: id, status: 1}});
     }
 
     const onBack = () => {

+ 3 - 2
src/main/resources/mapping/cquery/PostCQuery.xml

@@ -9,11 +9,12 @@
         post.contactName,post.contactMobile,post.contactEmail,
         post.jobPlace,post.contactName,post.contactMobile,post.contactEmail,post.workNatureID,post.tagID,company.userName,company.userMobile,company.companyEmail,
         company.CompanyName,company.insuredCount,company.bonus,item.`Name` as cultureLevelName,work_nature.Name as workNatureName,
-        post.ProfessionID,pro.ProfessionName,pro.parentProfessionID
+        post.ProfessionID,pro.ProfessionName,pro.parentProfessionID,item2.`Name` as workYearStr
         , IFNULL(count(rmgt.RecommendMgtID),0) as recommendNum
         from pc_post post
         left join pc_company company on post.CompanyID = company.CompanyID
         left join sys_dictionary_item item on item.value=post.CultureRank and item.DictionaryCode='CultureLevel'
+        left join sys_dictionary_item item2 on item2.value=post.workYear and item2.DictionaryCode='WorkYearType'
         left join sys_dictionary_item work_nature on work_nature.value=post.WorkNatureID and
         work_nature.DictionaryCode='WorkNature'
         left join pc_profession pro on post.ProfessionID = pro.ProfessionID
@@ -46,7 +47,7 @@
         post.workYear,post.cultureRank,post.postDesc,post.maxSalary,post.minSalary,post.welfare,post.postEmail,post.workTime,post.isTrail,post.trailMonths,
         post.TrailMaxSalary,post.trailMinSalary,post.createUserID,post.createTime,post.modifyUserID,post.modifyTime,post.validTime,post.startTime,post.endTime,
         post.jobPlace,company.userName,company.userMobile,company.companyEmail,company.CompanyName,company.insuredCount,item.`Name`,
-        post.ProfessionID,pro.ProfessionName,pro.parentProfessionID
+        post.ProfessionID,pro.ProfessionName,pro.parentProfessionID,item2.`Name`
         order by post.CreateTime desc
     </select>
     <select id="selectRecommendPostList" resultType="com.hz.employmentsite.vo.companyService.RecommendPostVo">