Browse Source

推荐信息管理

lizeyu 10 months ago
parent
commit
1237d0c266

+ 36 - 0
h5app/src/api/recommendmgt/index.ts

@@ -1,5 +1,41 @@
 import {request} from "@/utils/request";
 
+export function getList(query: any) {
+    return request(
+        {
+            url: 'jobusermgr/recommendmgt/getList',
+            method: 'get',
+            params: query,
+        },
+        {isNew: true},
+    );
+}
+
+export function getListById(recommendMgtID: any) {
+    return request(
+        {
+            url: 'jobusermgr/recommendmgt/getListById',
+            method: 'get',
+            params: {recommendMgtID},
+        },
+        {isNew: true},
+    );
+}
+
+export function setEntryState(data: any) {
+    return request(
+        {
+            url: 'jobusermgr/recommendmgt/setEntryState',
+            method: 'post',
+            data: data,
+        },
+        {
+            isNew: true,
+            successMsg: '提交成功!',
+            errorMsg: '提交失败!'
+        },
+    );
+}
 
 export function addRecommend(data: any) {
     return request(

+ 8 - 0
h5app/src/router/index.ts

@@ -57,6 +57,14 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/jobhunt/recommend/recommend',
                 component: () => import('@/views/pages/jobhunt/recommend/recommend.vue')
             },
+            {
+                path: 'tabMain/recommendMgt/list',
+                component: () => import('@/views/pages/recommendMgt/list.vue')
+            },
+            {
+                path: 'tabMain/recommendMgt/detail',
+                component: () => import('@/views/pages/recommendMgt/detail.vue')
+            },
             {
                 path: 'tabMain/company/list',
                 component: () => import('@/views/pages/company/list.vue')

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

@@ -84,7 +84,6 @@ export default defineComponent({
       getJobHuntList(searchParams).then(data => {
         dataList.value = dataList.value.concat(data.list);
         total.value = data.total;
-        console.log(dataList.value);
       })
       loading.value = false;
     }

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

@@ -183,7 +183,7 @@ export default defineComponent({
 <style lang="less">
 .custom {
   --placeholder-color: gray;
-  --placeholder-font-style: italic;
+  //--placeholder-font-style: italic;
   --placeholder-opacity: 1;
 }
 

+ 0 - 5
h5app/src/views/pages/post/list.vue

@@ -166,22 +166,17 @@ export default defineComponent({
       if(route.query.reload)reload();
     });
 
-    const onPicker = () => {
-      router.push({path: './picker', query: {}});
-    }
     return {
       arrowBackOutline,
       addCircleOutline,
       buildOutline,
       trashOutline,
       router,
-      colors,
       total,
       loading,
       dataList,
       pagination,
       searchParams,
-      onPicker,
       onBack,
       onAdd,
       onEdit,

+ 1 - 1
h5app/src/views/pages/post/recommendJob.vue

@@ -183,7 +183,7 @@ export default defineComponent({
 <style lang="less">
 .custom {
   --placeholder-color: gray;
-  --placeholder-font-style: italic;
+  //--placeholder-font-style: italic;
   --placeholder-opacity: 1;
 }
 

+ 156 - 0
h5app/src/views/pages/recommendMgt/detail.vue

@@ -0,0 +1,156 @@
+<template>
+  <ion-page class="list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
+        </ion-buttons>
+        <ion-title>推荐详情信息</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <div class="bw-vue-form">
+        <div class="form-title">推荐详情</div>
+        <div class="form-detail">
+          <ion-label>求职人</ion-label>
+          <ion-text>{{ dataModel.name }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>求职岗位</ion-label>
+          <ion-text>{{ dataModel.qzProfessionName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>招聘企业</ion-label>
+          <ion-text>{{ dataModel.companyName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>招聘岗位</ion-label>
+          <ion-text>{{ dataModel.zpProfessionName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>求职人联系电话</ion-label>
+          <ion-text>{{ dataModel.userMobile }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>企业联系人</ion-label>
+          <ion-text>{{ dataModel.companyUserName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>企业联系电话</ion-label>
+          <ion-text>{{ dataModel.companyMobile }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>入职状态</ion-label>
+          <ion-text>{{ dataModel.entryStateName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>推送时间</ion-label>
+          <ion-text>{{ dayjs(dataModel.createTime).format('YYYY-MM-DD') }}</ion-text>
+        </div>
+      </div>
+    </ion-content>
+    <ion-footer>
+      <ion-button shape="round" expand="block"
+                  @click="onSetEntryState(dataModel.recommendMgtID, dataModel.entryState!=1?'1':'0')">
+        {{ dataModel.entryState != 1 ? '已入职' : '已离职' }}
+      </ion-button>
+    </ion-footer>
+  </ion-page>
+</template>
+
+<script lang="ts">
+import {defineComponent, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline} from 'ionicons/icons';
+import {getListById, setEntryState} from '@/api/recommendmgt/index'
+
+interface RecommendModel {
+  companyMobile: string,
+  companyName: string,
+  companyUserName: string,
+  entryState: any,
+  entryStateName: string,
+  genderName: string,
+  jobHuntID: string,
+  jobPeopleIsRead: string,
+  jobPeopleIsReadName: string,
+  name: string,
+  officialAccountsID: string,
+  postID: string,
+  postIsRead: string,
+  postIsReadName: string,
+  pushName: string,
+  qzProfessionName: string,
+  recommendMgtID: string,
+  recommendType: any,
+  recommendTypeName: string,
+  userMobile: string,
+  zpProfessionName: string
+}
+
+export default defineComponent({
+  name: "RecommendDetail",
+  setup() {
+    const loading = ref(true);
+    const dataModel = ref<RecommendModel>({
+      companyMobile: "",
+      companyName: "",
+      companyUserName: "",
+      entryState: null,
+      entryStateName: "",
+      genderName: "",
+      jobHuntID: "",
+      jobPeopleIsRead: "",
+      jobPeopleIsReadName: "",
+      name: "",
+      officialAccountsID: "",
+      postID: "",
+      postIsRead: "",
+      postIsReadName: "",
+      pushName: "",
+      qzProfessionName: "",
+      recommendMgtID: "",
+      recommendType: null,
+      recommendTypeName: "",
+      userMobile: "",
+      zpProfessionName: ""
+    });
+    const router = useRouter();
+    const route = useRoute();
+    const loadData = async function (id: any) {
+      loading.value = true;
+      getListById(id).then((data) => {
+        debugger;
+        dataModel.value = data;
+      })
+      loading.value = false;
+    }
+
+    const onSetEntryState = async (recommendMgtID: any, entryState: any) => {
+      setEntryState({recommendMgtID: recommendMgtID, entryState: entryState}).then(() => {
+        loadData(route.query.recommendMgtID);
+      });
+    }
+
+    const onBack = () => {
+      router.push({path: './list', query: {reload: 1}});
+    }
+
+    return {
+      dataModel,
+      arrowBackOutline,
+      dayjs,
+      route,
+      loadData,
+      onSetEntryState,
+      onBack
+    }
+  }, created() {
+    this.loadData(this.route.query.recommendMgtID);
+  }
+});
+</script>
+<style lang="less">
+
+</style>

+ 169 - 0
h5app/src/views/pages/recommendMgt/list.vue

@@ -0,0 +1,169 @@
+<template>
+  <ion-page class="list-page company-list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
+        </ion-buttons>
+        <ion-title>推荐信息管理</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-item class="search-item">
+        <ion-input placeholder="姓名" class="custom"
+                   v-model="searchParams.name"
+                   style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;"></ion-input>
+        <ion-button slot="end"
+                    style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;"
+                    @click="reload">搜索
+        </ion-button>
+      </ion-item>
+      <ion-list class="list-content">
+        <ion-item v-for="(record,key) in dataList" :key="key" detail @click="onDetail(record.recommendMgtID)">
+          <ion-label>
+            <h2>{{ record.name }}</h2>
+            <ion-label style="display: flex;justify-content: space-between;">
+              <p>求职岗位:{{ record.professionName }}</p>
+              <p>{{ record.entryStateName }}</p>
+            </ion-label>
+            <p>招聘企业:{{ record.companyName }}</p>
+            <ion-label style="display: flex;justify-content: space-between;">
+              <p>联系电话:{{ record.userMobile }}</p>
+              <p>企业电话:{{ record.companyMobile }}</p>
+            </ion-label>
+            <p>
+              推送时间:{{ dayjs(record.createTime).format('YYYY-MM-DD') }}
+            </p>
+          </ion-label>
+        </ion-item>
+      </ion-list>
+      <b-empty v-if="dataList.length<=0" :loading="loading"/>
+      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+
+import {computed, defineComponent, reactive, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline} from 'ionicons/icons';
+import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
+import BEmpty from "@/components/empty.vue";
+import {getList, setEntryState} from '@/api/recommendmgt/index'
+
+export default defineComponent({
+  name: 'recommendMgtList',
+  components: {IonIcon, BEmpty},
+  setup() {
+    const router = useRouter();
+    const route = useRoute();
+    const total = ref(10);
+    const loading = ref(true);
+    const pagination = computed(() => ({
+      total: total,
+      current: searchParams.pageIndex,
+      pageSize: searchParams.pageSize
+    }));
+    const searchParams = reactive({
+      pageIndex: 1,
+      pageSize: 5,
+      name: '',
+    });
+    const dataList = ref<any>([]);
+
+    const loadData = async function () {
+      loading.value = true;
+      getList(searchParams).then(data => {
+        dataList.value = dataList.value.concat(data.list);
+        total.value = data.total;
+      })
+      loading.value = false;
+    }
+
+    const reload = () => {
+      dataList.value = [];
+      searchParams.pageIndex = 1;
+      loadData();
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+          searchParams.pageIndex += 1;
+          loadData();
+        }
+      }, 500);
+    }
+
+    const onDetail = (recommendMgtID: any) => {
+      router.push({path: './detail', query: {reload: 1, id: recommendMgtID,status: 1}});
+    }
+
+    const onBack = () => {
+      router.push('../');
+    }
+
+    onIonViewDidEnter(() => {
+      if (route.query.reload) reload();
+    });
+
+    return {
+      arrowBackOutline,
+      router,
+      total,
+      loading,
+      dataList,
+      pagination,
+      searchParams,
+      onBack,
+      onDetail,
+      onScroll,
+      loadData,
+      reload,
+      dayjs,
+    }
+  }, created() {
+    this.loadData();
+  }
+});
+</script>
+
+<style lang="less">
+.custom {
+  --placeholder-color: gray;
+  //--placeholder-font-style: italic;
+  --placeholder-opacity: 1;
+}
+
+.company-list-page {
+  .list-content {
+    margin: 0px 15px !important;
+    background-color: white !important;
+    border-radius: 0 !important;
+
+    ion-item {
+      margin-top: 10px;
+      font-size: 14px;
+      border: 1px solid rgb(242, 242, 245);
+
+      p {
+        font-size: 12px;
+      }
+    }
+  }
+}
+
+.container {
+  display: flex;
+  justify-content: center; /* 水平居中 */
+  align-items: center; /* 垂直居中 */
+}
+</style>

+ 2 - 2
h5app/src/views/sapp/tabMain.vue

@@ -34,11 +34,11 @@
           </div>
           <div class="tool-title">岗位信息管理</div>
         </a>
-        <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/post/recommend')">
+        <a class="tool-item box-line" @click="router.push('/tabs/tabMain/recommendMgt/list')">
           <div class="tool-img">
             <img src="@/assets/icon/gwtj.png">
           </div>
-          <div class="tool-title">岗位推荐</div>
+          <div class="tool-title">推荐信息管理</div>
         </a>
         <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/work/task/list')">
           <div class="tool-img">

+ 2 - 2
h5app/src/views/sapp/tabWork.vue

@@ -102,11 +102,11 @@
                </div>
                <div class="tool-title">岗位信息管理</div>
              </a>
-             <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/post/recommend')">
+             <a class="tool-item box-line" @click="router.push('/tabs/tabMain/recommendMgt/list')">
                <div class="tool-img">
                  <img src="@/assets/icon/gwtj.png">
                </div>
-               <div class="tool-title">岗位推荐</div>
+               <div class="tool-title">推荐信息管理</div>
              </a>
              <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/work/log/list')">
                <div class="tool-img">

+ 7 - 1
src/main/java/com/hz/employmentsite/controller/jobUserManager/RecommendMgtController.java

@@ -26,7 +26,7 @@ public class RecommendMgtController {
 
     @ResponseBody
     @GetMapping("/getList")
-    public BaseResponse getList(@RequestParam("page") int pageIndex, @RequestParam("limit") int pageSize,
+    public BaseResponse getList(@RequestParam("pageIndex") int pageIndex, @RequestParam("pageSize") int pageSize,
                                 @RequestParam(required = false) String name, @RequestParam(required = false) String companyName,
                                 @RequestParam(required = false) Integer recommendType, @RequestParam(required = false) Integer entryState,
                                 @RequestParam(required = false) String pushName, @RequestParam(required = false) String professionName) {
@@ -35,6 +35,12 @@ public class RecommendMgtController {
         return RespGenerstor.success(result);
     }
 
+    @ResponseBody
+    @GetMapping("/getListById")
+    public BaseResponse getListById(@RequestParam(required = false) String recommendMgtID) {
+        return RespGenerstor.success(recommendMgtService.getListById(recommendMgtID));
+    }
+
     @PostMapping("/setEntryState")
     public BaseResponse setEntryState(@RequestBody PcRecommendMgt data) {
         var result = recommendMgtService.setEntryState(data.getRecommendMgtID(), data.getEntryState());

+ 2 - 1
src/main/java/com/hz/employmentsite/mapper/cquery/RecommendMgtCQuery.java

@@ -10,7 +10,8 @@ import java.util.HashMap;
 import java.util.List;
 
 public interface RecommendMgtCQuery {
-    List<RecommendMgtVo> getRecommendMgtList(@Param("name") String name,
+    List<RecommendMgtVo> getRecommendMgtList(@Param("recommendMgtID") String recommendMgtID,
+                                             @Param("name") String name,
                                              @Param("companyName") String companyName,
                                              @Param("recommendType") Integer recommendType,
                                              @Param("entryState") Integer entryState,

+ 11 - 1
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/RecommendMgtServiceImpl.java

@@ -2,6 +2,7 @@ package com.hz.employmentsite.services.impl.jobUserManager;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.hz.employmentsite.filter.exception.BaseException;
 import com.hz.employmentsite.mapper.PcRecommendMgtMapper;
 import com.hz.employmentsite.mapper.cquery.RecommendMgtCQuery;
 import com.hz.employmentsite.model.PcRecommendMgt;
@@ -35,13 +36,22 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
     public PageInfo<RecommendMgtVo> getList(Integer page, Integer rows, String name, String companyName, Integer recommendType, Integer entryState, String pushName, String professionName) {
         PageHelper.startPage(page, rows);
 
-        List<RecommendMgtVo> list = recommendMgtCQuery.getRecommendMgtList(name, companyName, recommendType, entryState, pushName, professionName);
+        List<RecommendMgtVo> list = recommendMgtCQuery.getRecommendMgtList(null, name, companyName, recommendType, entryState, pushName, professionName);
 
         PageInfo<RecommendMgtVo> result = new PageInfo(list);
 
         return result;
     }
 
+    @Override
+    public RecommendMgtVo getListById(String recommendMgtID) {
+        RecommendMgtVo data = recommendMgtCQuery.getRecommendMgtList(recommendMgtID,null,null,null,null,null,null).stream().findFirst().orElse(null);
+        if(data==null){
+            throw new BaseException("500","未查询到数据");
+        }
+        return data;
+    }
+
     @Override
     public int addRecommend(List<PcRecommendMgt> list, String userID) {
         try {

+ 2 - 0
src/main/java/com/hz/employmentsite/services/service/jobUserManager/RecommendMgtService.java

@@ -14,6 +14,8 @@ import java.util.List;
 public interface RecommendMgtService {
     PageInfo<RecommendMgtVo> getList(Integer page, Integer rows, String name, String companyName, Integer recommendType, Integer entryState, String pushName, String professionName);
 
+    RecommendMgtVo getListById(String recommendMgtID);
+
     /**
      * 修改入职状态
      * @param id

+ 3 - 1
src/main/java/com/hz/employmentsite/vo/jobUserManager/RecommendMgtVo.java

@@ -11,7 +11,9 @@ public class RecommendMgtVo extends PcRecommendMgt {
     public String companyMobile;
     public String name;
     public String userMobile;
-    public String professionName;
+    public String zpProfessionName;//招聘岗位
+    public String qzProfessionName;//求职岗位
+    public String companyUserName;//企业联系人
     public String recommendTypeName;
     public String entryStateName;
     public String postIsReadName;

+ 6 - 1
src/main/resources/mapping/cquery/RecommendMgtCQuery.xml

@@ -4,7 +4,8 @@
     <select id="getRecommendMgtList" resultType="com.hz.employmentsite.vo.jobUserManager.RecommendMgtVo">
         select a.recommendmgtid,a.postid,a.jobhuntid,a.recommendtype,a.entrystate,a.officialaccountsid,
         a.postisread,a.jobpeopleisread,a.createuserid,a.createtime,a.modifyuserid,a.modifytime,
-        c.companyname,c.usermobile as companymobile,e.`name`,e.usermobile,f.professionname,
+        c.companyname,c.usermobile as companymobile,c.username as companyusername,e.`name`,e.usermobile,
+        f.professionname as zpprofessionname,f2.professionname as qzprofessionname,
         dic1.`name` as recommendtypename,dic2.`name` as entrystatename,dic3.`name` as postisreadname,
         dic4.`name` as jobpeopleisreadname,g.`name` as pushname, dic5.`name` as gendername
         from pc_recommend_mgt a
@@ -13,6 +14,7 @@
         left join pc_jobhunt d on a.JobHuntID = d.JobHuntID
         left join pc_jobuser e on d.JobUserID = e.JobuserID
         left join pc_profession f on b.ProfessionID = f.ProfessionID
+        left join pc_profession f2 on d.ProfessionID = f2.ProfessionID
         left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='RecommendType') dic1 on a.RecommendType = dic1.`Value`
         left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='EntryState') dic2 on a.EntryState = dic2.`Value`
         left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='IsRead') dic3 on a.PostIsRead = dic3.`Value`
@@ -20,6 +22,9 @@
         left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='Gender') dic5 on e.Sex = dic5.`Value`
         left join sys_user g on a.CreateUserID = g.UserID
         <where>
+            <if test="recommendMgtID != '' and recommendMgtID != null">
+                and a.RecommendMgtID = #{recommendMgtID}
+            </if>
             <if test="name != '' and name != null">
                 and e.name like Concat('%',#{name},'%')
             </if>

+ 8 - 8
vue/src/views/jobUserManager/recommendMgt/index.vue

@@ -127,8 +127,8 @@ export default defineComponent({
     const modalRoleEditRef = ref();
     const formRef = ref<FormInstance>();
     const searchParamsState = reactive({
-      page: 1,
-      limit: 20,
+      pageIndex: 1,
+      pageSize: 20,
       post: '',
       name: '',
       companyName: '',
@@ -149,14 +149,14 @@ export default defineComponent({
         width: 80,
         key: 'recommendMgtID',
         customRender: (item) =>
-          `${searchParamsState.limit * (searchParamsState.page - 1) + item.index + 1}`,
+          `${searchParamsState.pageSize * (searchParamsState.pageIndex - 1) + item.index + 1}`,
       },
       {title: '求职者', dataIndex: 'name', key: 'name', width: 100},
       {title: '求职者电话', dataIndex: 'userMobile', key: 'userMobile', width: 150},
       {title: '岗位', dataIndex: 'professionName', key: 'professionName', width: 150},
       {title: '企业', dataIndex: 'companyName', key: 'companyName', width: 150},
       {title: '企业电话', dataIndex: 'companyMobile', key: 'companyMobile', width: 150},
-      {title: '类型', dataIndex: 'recommendTypeName', key: 'recommendTypeName', width: 100},
+      {title: '推荐类型', dataIndex: 'recommendTypeName', key: 'recommendTypeName', width: 100},
       {title: '入职状态', dataIndex: 'entryStateName', key: 'entryStateName'},
       {title: '推送人', dataIndex: 'pushName', key: 'pushName'},
       {
@@ -167,8 +167,8 @@ export default defineComponent({
     ];
     const pagination = computed(() => ({
       total: formState.total,
-      current: searchParamsState.page,
-      pageSize: searchParamsState.limit,
+      current: searchParamsState.pageIndex,
+      pageSize: searchParamsState.pageSize,
       showSizeChanger: true,
       showTotal: (total) => getPaginationTotalTitle(total),
     }));
@@ -185,8 +185,8 @@ export default defineComponent({
       pageSize: number;
       current: number;
     }) => {
-      searchParamsState.page = pag.current;
-      searchParamsState.limit = pag.pageSize;
+      searchParamsState.pageIndex = pag.current;
+      searchParamsState.pageSize = pag.pageSize;
       loadData();
     };