Browse Source

web-岗位信息管理-推荐求职人员调整

liao-sea 8 months ago
parent
commit
fb5838393e

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

@@ -66,7 +66,7 @@ public class RecommendMgtController {
                                                     @RequestParam(required = false) String companyName,@RequestParam(required = false) String inviteProfessionName, @RequestParam("type") Integer type,
                                                     @RequestParam(required = false) String companyName,@RequestParam(required = false) String inviteProfessionName, @RequestParam("type") Integer type,
                                                     @RequestParam(required = false) String parentProfessionID, @RequestParam(required = false) Integer cultureRank,
                                                     @RequestParam(required = false) String parentProfessionID, @RequestParam(required = false) Integer cultureRank,
                                                     @RequestParam(required = false) Integer workYear, @RequestParam(required = false) Integer minSalary,@RequestParam(required = false) Integer maxSalary,
                                                     @RequestParam(required = false) Integer workYear, @RequestParam(required = false) Integer minSalary,@RequestParam(required = false) Integer maxSalary,
-                                                    @RequestParam(required = false) List<String> regionNameList,@RequestParam(required = false) List<String>  siteNameList) {
+                                                    @RequestParam(required = false) List<String> regionNameList,@RequestParam(required = false) List<String> siteNameList) {
         PageInfo<RecommendCompanyPostVo> result = recommendMgtService.getRecommendCompanyPostList(pageIndex, pageSize, jobHuntID, professionID, companyName,inviteProfessionName, type, parentProfessionID, cultureRank, workYear, minSalary, maxSalary,regionNameList,siteNameList);
         PageInfo<RecommendCompanyPostVo> result = recommendMgtService.getRecommendCompanyPostList(pageIndex, pageSize, jobHuntID, professionID, companyName,inviteProfessionName, type, parentProfessionID, cultureRank, workYear, minSalary, maxSalary,regionNameList,siteNameList);
         return RespGenerstor.success(result);
         return RespGenerstor.success(result);
     }
     }
@@ -79,9 +79,9 @@ public class RecommendMgtController {
                                             @RequestParam(required = false) String userName, @RequestParam("type") Integer type,
                                             @RequestParam(required = false) String userName, @RequestParam("type") Integer type,
                                             @RequestParam(required = false) Integer cultureRank, @RequestParam(required = false) Integer keyPersonType,
                                             @RequestParam(required = false) Integer cultureRank, @RequestParam(required = false) Integer keyPersonType,
                                             @RequestParam(required = false) String parentProfessionID, @RequestParam(required = false) Integer workYear,
                                             @RequestParam(required = false) String parentProfessionID, @RequestParam(required = false) Integer workYear,
-                                            @RequestParam(required = false) String regionCode, @RequestParam(required = false) String siteID,
+                                            @RequestParam(required = false) List<String> regionNameList, @RequestParam(required = false) List<String> siteNameList,
                                             @RequestParam(required = false) Integer minSalary,@RequestParam(required = false) Integer maxSalary) {
                                             @RequestParam(required = false) Integer minSalary,@RequestParam(required = false) Integer maxSalary) {
-        PageInfo<RecommendJobVo> result = recommendMgtService.getRecommendJobList(pageIndex, pageSize, postID, professionID,huntProfessionName, userName, type, cultureRank, keyPersonType, parentProfessionID, workYear,regionCode,siteID, minSalary, maxSalary);
+        PageInfo<RecommendJobVo> result = recommendMgtService.getRecommendJobList(pageIndex, pageSize, postID, professionID,huntProfessionName, userName, type, cultureRank, keyPersonType, parentProfessionID, workYear,regionNameList,siteNameList, minSalary, maxSalary);
         return RespGenerstor.success(result);
         return RespGenerstor.success(result);
     }
     }
 
 

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

@@ -55,7 +55,7 @@ public interface RecommendMgtCQuery {
                                              @Param("userName") String userName, @Param("type") Integer type,
                                              @Param("userName") String userName, @Param("type") Integer type,
                                              @Param("cultureRank") Integer cultureRank, @Param("keyPersonType") Integer keyPersonType,
                                              @Param("cultureRank") Integer cultureRank, @Param("keyPersonType") Integer keyPersonType,
                                              @Param("parentProfessionID") String parentProfessionID, @Param("workYear") Integer workYear,
                                              @Param("parentProfessionID") String parentProfessionID, @Param("workYear") Integer workYear,
-                                             @Param("regionCode") String regionCode, @Param("siteID") String siteID,
+                                             @Param("regionNameList") String regionNameList, @Param("siteNameList") String siteNameList,
                                              @Param("minSalary") Integer minSalary,@Param("maxSalary") Integer maxSalary,@Param("recommendedJobHuntIDList") String recommendedJobHuntIDList);
                                              @Param("minSalary") Integer minSalary,@Param("maxSalary") Integer maxSalary,@Param("recommendedJobHuntIDList") String recommendedJobHuntIDList);
 
 
     List<ProfessionLevel> getProfessionLevelList();
     List<ProfessionLevel> getProfessionLevelList();

+ 4 - 2
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobUserServiceImpl.java

@@ -187,6 +187,7 @@ public class JobUserServiceImpl implements JobUserService {
     @Override
     @Override
     public List<PcEducation> getJobUserEducationList(String jobuserID) {
     public List<PcEducation> getJobUserEducationList(String jobuserID) {
         PcEducationExample exp = new PcEducationExample();
         PcEducationExample exp = new PcEducationExample();
+        exp.setOrderByClause("SchoolTime DESC");
         PcEducationExample.Criteria cro = exp.or();
         PcEducationExample.Criteria cro = exp.or();
         cro.andJobuserIDEqualTo(jobuserID);
         cro.andJobuserIDEqualTo(jobuserID);
         List<PcEducation> educationList = pcEducationMapper.selectByExample(exp);
         List<PcEducation> educationList = pcEducationMapper.selectByExample(exp);
@@ -196,10 +197,11 @@ public class JobUserServiceImpl implements JobUserService {
     @Override
     @Override
     public List<PcExperience> getJobUserPcExperienceList(String jobuserID) {
     public List<PcExperience> getJobUserPcExperienceList(String jobuserID) {
         PcExperienceExample exp = new PcExperienceExample();
         PcExperienceExample exp = new PcExperienceExample();
+        exp.setOrderByClause("StartTime DESC");
         PcExperienceExample.Criteria cro = exp.or();
         PcExperienceExample.Criteria cro = exp.or();
         cro.andJobuserIDEqualTo(jobuserID);
         cro.andJobuserIDEqualTo(jobuserID);
-        List<PcExperience> educationList = pcExperienceMapper.selectByExample(exp);
-        return educationList;
+        List<PcExperience> experienceList = pcExperienceMapper.selectByExample(exp);
+        return experienceList;
     }
     }
 
 
     @Override
     @Override

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

@@ -197,7 +197,7 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
     @Override
     @Override
     public PageInfo<RecommendJobVo> getRecommendJobList(Integer page, Integer rows, String postID, String professionID,String huntProfessionName,
     public PageInfo<RecommendJobVo> getRecommendJobList(Integer page, Integer rows, String postID, String professionID,String huntProfessionName,
                                                         String userName, Integer type, Integer cultureRank, Integer keyPersonType, String parentProfessionID,
                                                         String userName, Integer type, Integer cultureRank, Integer keyPersonType, String parentProfessionID,
-                                                        Integer workYear,String regionCode,String siteID,Integer minSalary,Integer maxSalary) {
+                                                        Integer workYear, List<String> regionNameList, List<String> siteNameList,Integer minSalary,Integer maxSalary) {
         PageHelper.startPage(page, rows);
         PageHelper.startPage(page, rows);
         List<String> recommendedJobHuntIDList = new ArrayList<>();
         List<String> recommendedJobHuntIDList = new ArrayList<>();
         PcRecommendMgtExample recommendMgtExp = new PcRecommendMgtExample();
         PcRecommendMgtExample recommendMgtExp = new PcRecommendMgtExample();
@@ -208,7 +208,7 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
                 recommendedJobHuntIDList.add(curRecommended.getJobHuntID());
                 recommendedJobHuntIDList.add(curRecommended.getJobHuntID());
             }
             }
         }
         }
-        List<RecommendJobVo> list = recommendMgtCQuery.getRecommendJobList(postID, professionID, huntProfessionName, userName, type, cultureRank, keyPersonType, parentProfessionID, workYear,regionCode,siteID, minSalary, maxSalary,stringUtils.ListToInSql(recommendedJobHuntIDList));
+        List<RecommendJobVo> list = recommendMgtCQuery.getRecommendJobList(postID, professionID, huntProfessionName, userName, type, cultureRank, keyPersonType, parentProfessionID, workYear,stringUtils.ListToInSql(regionNameList),stringUtils.ListToInSql(siteNameList), minSalary, maxSalary,stringUtils.ListToInSql(recommendedJobHuntIDList));
         List<RecommendJobVo> resultList = new ArrayList<>();
         List<RecommendJobVo> resultList = new ArrayList<>();
         list.forEach(x -> {
         list.forEach(x -> {
             if (stringUtils.IsNullOrEmpty(x.getRecommendMgtID())) {
             if (stringUtils.IsNullOrEmpty(x.getRecommendMgtID())) {

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

@@ -63,7 +63,7 @@ public interface RecommendMgtService {
      * */
      * */
     PageInfo<RecommendJobVo> getRecommendJobList(Integer page, Integer rows, String postID, String professionID,String huntProfessionName, String userName,
     PageInfo<RecommendJobVo> getRecommendJobList(Integer page, Integer rows, String postID, String professionID,String huntProfessionName, String userName,
                                                  Integer type, Integer cultureRank, Integer keyPersonType, String parentProfessionID, Integer workYear,
                                                  Integer type, Integer cultureRank, Integer keyPersonType, String parentProfessionID, Integer workYear,
-                                                 String regionCode,String siteID,Integer minSalary,Integer maxSalary);
+                                                 List<String> regionNameList,List<String> siteNameList,Integer minSalary,Integer maxSalary);
 
 
     List<ProfessionLevel> getProfessionLevelList();
     List<ProfessionLevel> getProfessionLevelList();
 
 

+ 1 - 0
src/main/java/com/hz/employmentsite/vo/jobUserManager/RecommendJobVo.java

@@ -7,6 +7,7 @@ import java.math.BigDecimal;
 @Data
 @Data
 public class RecommendJobVo {
 public class RecommendJobVo {
     public String recommendMgtID;
     public String recommendMgtID;
+    public String jobUserID;
     public String jobhuntID;
     public String jobhuntID;
     public String userName;
     public String userName;
     public String userMobile;
     public String userMobile;

+ 5 - 5
src/main/resources/mapping/cquery/RecommendMgtCQuery.xml

@@ -168,7 +168,7 @@
     </select>
     </select>
     <!--    推荐求职人员信息-->
     <!--    推荐求职人员信息-->
     <select id="getRecommendJobList" resultType="com.hz.employmentsite.vo.jobUserManager.RecommendJobVo">
     <select id="getRecommendJobList" resultType="com.hz.employmentsite.vo.jobUserManager.RecommendJobVo">
-        select a.jobhuntid,b.name as userName,b.usermobile,e.sitename,dic1.`name` as culturerankname,dic2.`name` as
+        select a.jobhuntid,b.jobUserID,b.name as userName,b.usermobile,e.sitename,dic1.`name` as culturerankname,dic2.`name` as
         keypersontypename,a.workyear,a.minsalary,a.maxsalary,area.name as regionName,
         keypersontypename,a.workyear,a.minsalary,a.maxsalary,area.name as regionName,
         case when d.recommendmgtid is null then '未推荐' else '已推荐' end as
         case when d.recommendmgtid is null then '未推荐' else '已推荐' end as
         isrecommend,d.recommendMgtID,a.professionid,c.professionname
         isrecommend,d.recommendMgtID,a.professionid,c.professionname
@@ -198,12 +198,12 @@
             <if test="cultureRank!=null and cultureRank!=''">
             <if test="cultureRank!=null and cultureRank!=''">
                 and b.CultureRank <![CDATA[<=]]> #{cultureRank}
                 and b.CultureRank <![CDATA[<=]]> #{cultureRank}
             </if>
             </if>
-            <if test="regionCode!=null and regionCode!=''">
-                and b.regionCode = #{regionCode}
+            <if test="regionNameList !=null and regionNameList!=''">
+                and area.name in (${regionNameList})
             </if>
             </if>
 
 
-            <if test="siteID!=null and siteID!=''">
-                and b.siteID =  #{siteID}
+            <if test="siteNameList!=null and siteNameList!=''">
+                and e.siteName in  (${siteNameList})
             </if>
             </if>
             <choose>
             <choose>
                 <when test="parentProfessionID!=null and parentProfessionID!=''">
                 <when test="parentProfessionID!=null and parentProfessionID!=''">

+ 353 - 0
vue/src/views/companyService/post/jobUserDetail.vue

@@ -0,0 +1,353 @@
+<template>
+  <a-modal
+    :width="1200"
+    v-model:visible="visible"
+    title="查看求职人员信息"
+    :closable="true"
+    :keyboard="false"
+    :mask-closable="true"
+    ok-text="确定"
+    @ok="onCommit"
+  >
+    <div class="jl-content">
+      <!-- 基本信息与学历,工作经历 -->
+      <div class="info-content">
+        <a-divider orientation="left">基本信息</a-divider>
+        <a-descriptions :column="4" bordered style="text-align: center;">
+          <a-descriptions-item label="姓名">{{ dataModel.name }}</a-descriptions-item>
+          <a-descriptions-item label="性别">{{ dataModel.genderName }}</a-descriptions-item>
+          <a-descriptions-item label="年龄">{{ dataModel.age }}</a-descriptions-item>
+          <a-descriptions-item label="民族">{{ dataModel.nationName }}</a-descriptions-item>
+          <a-descriptions-item label="政治面貌">{{ dataModel.politicsStatusName }}</a-descriptions-item>
+          <a-descriptions-item label="学历">{{ dataModel.cultureName }}</a-descriptions-item>
+          <a-descriptions-item label="手机">{{ dataModel.userMobile }}</a-descriptions-item>
+          <a-descriptions-item label="重点人员类别">{{ dataModel.keyTypeName }}</a-descriptions-item>
+          <a-descriptions-item label="健康状况">{{ dataModel.healthName }}</a-descriptions-item>
+          <a-descriptions-item label="就业状态">{{ dataModel.jobStatusName }}</a-descriptions-item>
+          <a-descriptions-item :span="2" label="住址">{{ dataModel.address }}</a-descriptions-item>
+          <a-descriptions-item :span="4" label="标签">
+            <a-tag v-for="(item, index) in dataModel.listLabel" :key="index">
+            {{ item.labelName }}
+            </a-tag>
+          </a-descriptions-item>
+          <a-descriptions-item :span="4" label="兴趣爱好">{{ dataModel.hobby }}</a-descriptions-item>
+          <a-descriptions-item :span="4" label="专业技术特长">{{ dataModel.personalSkills }}</a-descriptions-item>
+        </a-descriptions>
+        <a-divider orientation="left">教育经历</a-divider>
+        <a-table :columns="educationColumns" :data-source="educationData" :pagination="false" bordered
+                 style="margin-left: 11px;">
+          <template #bodyCell="{ column, index, record}">
+            <template v-if="column.key === 'cultureRank'">
+              <div>
+                {{
+                  getCultureName(record.cultureRank)
+                }}
+              </div>
+            </template>
+            <template v-if="column.key === 'schoolTime'">
+              <div>
+                {{
+                  dayjs(record.schoolTime).format('YYYY-MM-DD')
+                }}
+              </div>
+            </template>
+            <template v-if="column.key === 'overTime'">
+              <div>
+                {{
+                  dayjs(record.overTime).format('YYYY-MM-DD')
+                }}
+              </div>
+            </template>
+          </template>
+        </a-table>
+        <a-divider orientation="left">求职意向</a-divider>
+        <a-table :columns="jobHuntColumns" :data-source="jobHuntListData" bordered :pagination="false"
+                 style="margin-left: 11px">
+        </a-table>
+        <a-divider orientation="left">工作经历</a-divider>
+        <a-timeline style="margin-left: 25px;">
+          <a-timeline-item v-for="(item, key) in experienceData" :key="key" position="left">
+            <p>{{ dayjs(item.startTime).format('YYYY-MM-DD') }}至{{ dayjs(item.endTime).format('YYYY-MM-DD') }}</p>
+            <p>工作单位:{{ item.workAddress }}</p>
+            <p>职务:{{ item.duties }}</p>
+          </a-timeline-item>
+        </a-timeline>
+        <a-divider orientation="left">附件</a-divider>
+        <b-upload-file :fileRefId="dataModel.jobUserID" :readonly="true" :multiple="true" style="width: 100%;"
+                       :setFileList="setFileList" :accept="'.pdf,.png,.jpg'"></b-upload-file>
+      </div>
+    </div>
+  </a-modal>
+</template>
+
+<script lang="ts">
+import {defineComponent, reactive, ref, toRefs} from "vue";
+import {getDataById, getEducationList, getExperienceList} from "@/api/jobUserManager/jobuser";
+import type {SelectProps, TableColumnsType} from "ant-design-vue";
+import dayjs from "dayjs";
+import {getSysDictionaryList} from "@/api/system/dictionary";
+import {getJobHuntList} from "@/api/jobUserManager/jobhunt";
+import {useUserStore} from "@/store/modules/user";
+import crtyptoHelp from "@/utils/crypto";
+import BUploadFile from "@/components/file/uploadFile.vue";
+
+interface jobUserModel {
+  dataModel: any;
+}
+
+export default defineComponent({
+  props: {
+    loadData: {
+      type: Function,
+      default: null
+    }
+  },
+  components:{BUploadFile},
+  setup() {
+    const visible = ref(false);
+    const userStore = useUserStore();
+    const userInfo = ref(userStore.getUserInfo)
+
+    // 求职人员信息
+    const jobUserInfo = reactive<jobUserModel>({dataModel:{}});
+    // 受教育经历
+    const educationData = ref<Array<any>>([]);
+    // 受教育经历表格定义
+    const educationColumns: TableColumnsType = [
+      {title: '序号', align: "center", key: 'educationID', width: 120,
+        customRender: item => `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`
+      },
+      {title: '学校名', dataIndex: 'schoolName', key: 'schoolName', align: "center", width: 120},
+      {title: '文化程度', dataIndex: 'cultureRank', key: 'cultureRank', align: "center", width: 120},
+      {title: '就读时间', dataIndex: 'schoolTime', key: 'schoolTime', align: "center", width: 120},
+      {title: '毕业时间', dataIndex: 'overTime', key: 'overTime', align: "center", width: 120},
+      {title: '专业', dataIndex: 'major', key: 'major', align: "center", width: 120},];
+
+    const searchParams = reactive({
+      pageIndex: 1,
+      pageSize: 99
+    });
+    // 工作经验数据
+    const experienceData = ref<Array<any>>([]);
+    // 求职意向数据
+    const jobHuntListData = ref<Array<any>>([]);
+    // 求职意向表格定义
+    const jobHuntColumns: TableColumnsType = [
+      {
+        title: '序号',
+        align: 'center',
+        width: 80,
+        key: 'jobHuntID',
+        customRender: (item) =>
+          `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`,
+      },
+      {title: '希望工作地区', dataIndex: 'areaWork', key: 'areaWork', width: 150, align: "center",},
+      {
+        title: '可到职日期', dataIndex: 'inDate', key: 'inDate', width: 100, align: "center",
+        customRender: ({record}) => record.inDate == null ? "" : dayjs(record.inDate).format('YYYY-MM-DD'),
+      },
+      {title: '工作年限', dataIndex: 'workYear', key: 'workYear', align: "center",},
+      {title: '求职类型', dataIndex: 'jobHuntTypeStr', key: 'jobHuntTypeStr', align: "center",},
+      {title: '求职岗位', dataIndex: 'professionName', key: 'professionName', align: "center",},
+      {title: '人才类型', dataIndex: 'jobUserTypeStr', key: 'jobUserTypeStr', align: "center",},
+      {
+        title: '月薪要求', dataIndex: 'salary', key: 'salary', align: "center",
+        customRender: (item) => {
+          const salary = showSalary(item.record.minSalary, item.record.maxSalary);
+          return salary;
+        }
+      },
+    ];
+    // 期望月薪显示优化方法
+    const showSalary = (minSalary: any, maxSalary: any) => {
+      if (minSalary != null) {
+        if (maxSalary != null) {
+          return minSalary.toString() + "-" + maxSalary.toString();
+        } else {
+          return "≥" + minSalary.toString();
+        }
+      } else {
+        if (maxSalary != null) {
+          return "≤" + maxSalary.toString();
+        } else {
+          return "";
+        }
+      }
+    }
+    // 教育经历数据
+    const cultureList = ref<SelectProps['options']>();
+
+    // 加载求职人员数据
+    const show = async function (id: any)  {
+      await getCultureList();
+      await loadJobHuntData(id);
+      await loadEducationData(id);
+      await loadExperienceData(id);
+      getDataById(id, userInfo.value.userID, 1).then(data => {
+        jobUserInfo.dataModel = data;
+        jobUserInfo.dataModel.userMobile = crtyptoHelp.decryptDesText(jobUserInfo.dataModel.userMobile);
+        jobUserInfo.dataModel.identityNumber = crtyptoHelp.decryptDesText(jobUserInfo.dataModel.identityNumber);
+        visible.value = true;
+      });
+    };
+
+    const onCommit = ()=>{
+      visible.value = false;
+    }
+    // 加载教育经历
+    const loadEducationData = (id: any) => {
+      getEducationList(id).then(data => {
+        if (data) {
+          educationData.value = data;
+        }
+      });
+    }
+    // 加载工作经历
+    const loadExperienceData = (id: any) => {
+      getExperienceList(id).then(data => {
+        if (data) {
+          experienceData.value = data;
+        }
+      })
+    }
+    // 加载求职意向数据
+    const loadJobHuntData = (id: any)=> {
+      let params = {
+        pageIndex: 1,
+        pageSize: 999,
+        jobUserID:id
+      }
+      getJobHuntList(params).then(result => {
+        jobHuntListData.value = result.list
+      })
+    }
+
+    // 获取教育经历数据
+    const getCultureList = async function () {
+      getSysDictionaryList('HighestDegree').then((data) => {
+        cultureList.value = data;
+      });
+    };
+
+    function getCultureName(value: any) {
+      let filter = cultureList.value?.filter(item => item.value == value);
+      if (filter && filter.length > 0) {
+        return filter[0].name
+      }
+      return "";
+    }
+
+    const fileList = ref();
+    const setFileList = (files) => {
+      fileList.value = files;
+    };
+
+    return {
+      ...toRefs(jobUserInfo),
+      visible,
+      fileList,
+      educationData,
+      loadEducationData,
+      jobHuntListData,
+      loadJobHuntData,
+      experienceData,
+      loadExperienceData,
+      educationColumns,
+      jobHuntColumns,
+      show,
+      showSalary,
+      onCommit,
+      setFileList,
+      getCultureName,
+      dayjs
+    };
+  },
+  created() {
+
+  }
+});
+</script>
+
+<style lang="less" scoped>
+.card-search {
+
+  .jl-content {
+    min-height: calc(100vh - 240px);
+    width: 100%;
+    display: flex;
+
+    .avt-content {
+      width: 20%;
+      background-color: #e7e7e7;
+      padding: 10px;
+
+      .avt-image {
+        display: flex;
+        flex-wrap: wrap;
+        justify-content: center;
+        img{
+          width:120px;
+          height:120px;
+        }
+      }
+
+      .age-info {
+        width: 100%;
+        display: flex;
+        justify-content: space-between;
+        margin-top: 15px;
+        padding: 0 20%;
+      }
+
+      .politics-info {
+        margin-top: 25px;
+        display: grid;
+        row-gap: 22px;
+        grid-template-columns: repeat(2, minmax(0, 1fr));
+
+        .label-span {
+          text-align: right;
+        }
+      }
+
+      .nameTitle {
+        margin-top: 1rem;
+        text-align: center;
+        font-size: 20px;
+        font-weight: 700;
+      }
+
+      .label-info {
+        margin-top: 15px;
+        padding: 0 5%;
+
+        .title {
+          margin-bottom: 10px;
+        }
+
+        .flex-box {
+          display: flex;
+          flex-wrap: wrap;
+
+          .ant-tag {
+            text-align: center;
+            margin-bottom: 8px;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+          }
+        }
+      }
+
+    }
+
+    .info-content {
+      width: 80%;
+      height: 100%;
+      margin-left: 10px;
+    }
+  }
+}
+
+
+</style>

+ 91 - 37
vue/src/views/companyService/post/recommend.vue

@@ -122,45 +122,54 @@
           </a-col>
           </a-col>
         </a-row>
         </a-row>
         <a-row :gutter="24" v-show="expand">
         <a-row :gutter="24" v-show="expand">
-          <a-col :span="6">
-            <a-form-item label="所属区县" :label-col="{ span: 8 }" name="regionCode">
+          <a-col :span="12" style="padding-left: 37px;">
+            <a-form-item label="所属区县" :label-col="{ span: 3 }" name="regionCode">
               <a-select
               <a-select
-                ref="select"
-                v-model:value="searchParams.regionCode"
+                v-model:value="curRegionNameList"
                 :options="regionList"
                 :options="regionList"
-                :field-names="{ label: 'name', value: 'code' }"
-                :allow-clear="true"
-                @change="loadData"
+                mode="multiple"
+                size="middle"
+                @change="curRegionNameListChange"
               >
               >
               </a-select>
               </a-select>
             </a-form-item>
             </a-form-item>
           </a-col>
           </a-col>
-          <a-col :span="6">
-            <a-form-item label="所属驿站" :label-col="{ span: 8 }" name="siteID">
+          <a-col :span="12" style="padding-left: 37px;">
+            <a-form-item label="所属驿站" :label-col="{ span: 3 }" name="siteID">
               <a-select
               <a-select
-                ref="select"
-                v-model:value="searchParams.siteID"
+                v-model:value="curSiteNameList"
                 :options="siteList"
                 :options="siteList"
-                :field-names="{ label: 'siteName', value: 'siteID' }"
-                :allow-clear="true"
-                @change="loadData"
+                mode="multiple"
+                size="middle"
+                @change="onSearch"
               >
               >
               </a-select>
               </a-select>
             </a-form-item>
             </a-form-item>
           </a-col>
           </a-col>
-          <a-col :span="12">
-            <a-form-item label="薪资要求" :label-col="{span:4}" name="maxSalary">
-              <a-input type="number" v-model:value="searchParams.minSalary" style="width:120px;" placeholder=""/>
-              <label style="margin:10px;">-</label>
-              <a-input type="number" v-model:value="searchParams.maxSalary" style="width:120px;" placeholder=""/>
-              <a-checkbox  v-if="searchParams.type===0" style="float: right;"
-                           v-model:checked="searchParams.checkParentProfessionID"
-                           @change="onSearch">
-                相关行业
-              </a-checkbox>
+        </a-row>
+
+        <a-row :gutter="24" v-show="expand">
+          <a-col :span="9" >
+            <a-form-item label="薪资要求" :label-col="{span:5}" name="maxSalary">
+              <a-input-group compact>
+                <a-input :min="0" :controls="false" v-model:value="searchParams.minSalary"
+                         style="width:110px;" placeholder=""/>
+                <a-input placeholder="——" disabled style="width: 30px; border-left: 0;border-right: 0;
+                       pointer-events: none;background: #fff;margin-left: 1px; "/>
+                <a-input :min="searchParams.minSalary" :controls="false" v-model:value="searchParams.maxSalary"
+                         style="width:110px;" placeholder=""/>
+              </a-input-group>
             </a-form-item>
             </a-form-item>
           </a-col>
           </a-col>
+          <a-col  :span="15">
+            <a-checkbox  v-if="searchParams.type===0"
+                         v-model:checked="searchParams.checkParentProfessionID"
+                         @change="onSearch">
+              相关行业
+            </a-checkbox>
+          </a-col>
         </a-row>
         </a-row>
+
         <a-row class="edit-operation">
         <a-row class="edit-operation">
           <a-col :span="24" style="text-align: right">
           <a-col :span="24" style="text-align: right">
             <a-button type="primary" html-type="submit" v-if="searchParams.type===0" functioncode="T01020206"
             <a-button type="primary" html-type="submit" v-if="searchParams.type===0" functioncode="T01020206"
@@ -181,9 +190,15 @@
                 </a-button>
                 </a-button>
               </div>
               </div>
             </template>
             </template>
+            <template v-if="column.key === 'userName'">
+              <div style="text-align: center;color:#3a7be0;">
+                <a size="small" @click='onShowJobUserInfo(record)' >{{ record.userName }}</a>
+              </div>
+            </template>
           </template>
           </template>
         </a-table>
         </a-table>
       </div>
       </div>
+      <jobUserDetailModel ref="modalJobUserInfoRef"></jobUserDetailModel>
     </div>
     </div>
   </a-modal>
   </a-modal>
 </template>
 </template>
@@ -198,17 +213,24 @@ import {getSysDictionaryList} from "@/api/system/dictionary";
 import {message} from "ant-design-vue";
 import {message} from "ant-design-vue";
 import {debounce} from "lodash-es";
 import {debounce} from "lodash-es";
 import {getSiteList} from "@/api/baseSettings/siteInfo";
 import {getSiteList} from "@/api/baseSettings/siteInfo";
-import {get} from "@/api/common";
+import {getRegionCodeList} from '@/api/system/area/index';
+import JobUserDetailModel from "./jobUserDetail.vue";
+
 export default defineComponent({
 export default defineComponent({
   name: 'RecommendJobList',
   name: 'RecommendJobList',
+  components:{JobUserDetailModel},
   setup() {
   setup() {
     const visible = ref<boolean>(false);
     const visible = ref<boolean>(false);
     const confirmLoading = ref<boolean>(false);
     const confirmLoading = ref<boolean>(false);
     const formRef = ref<FormInstance>();
     const formRef = ref<FormInstance>();
-    const expand = ref(false);
+    const modalJobUserInfoRef = ref();
+    const expand = ref(true);
     const title = ref<string>('');
     const title = ref<string>('');
     const siteList = ref<any>([]);
     const siteList = ref<any>([]);
-    const regionList = ref<SelectProps['options']>();
+    const regionList = ref<any>([]);
+
+    const curRegionNameList = ref([]);
+    const curSiteNameList = ref([]);
     const searchParams = reactive({
     const searchParams = reactive({
       pageIndex: 1,
       pageIndex: 1,
       pageSize: 10,
       pageSize: 10,
@@ -227,7 +249,9 @@ export default defineComponent({
       regionCode: null,
       regionCode: null,
       siteID:null,
       siteID:null,
       minSalary: null,
       minSalary: null,
-      maxSalary: null
+      maxSalary: null,
+      regionNameList:'',
+      siteNameList:'',
     });
     });
     const formState = reactive({
     const formState = reactive({
       total: 0,
       total: 0,
@@ -274,15 +298,33 @@ export default defineComponent({
     const dataList = ref([]);
     const dataList = ref([]);
     const addRecommendList = ref([] as any);
     const addRecommendList = ref([] as any);
 
 
-    const getAllSites = () => {
+    const getRegionList = async function () {
+      const regionResult: any = await getRegionCodeList();
+      regionResult.map(x=>{
+        regionList.value.push({value:x.name});
+      });
+    };
+    const getAllSites = async function () {
+      siteList.value = [];
       getSiteList({pageIndex:1,pageSize:9999}).then((result :any) => {
       getSiteList({pageIndex:1,pageSize:9999}).then((result :any) => {
-        siteList.value = result.list;
-        if(searchParams.regionCode){
-          siteList.value = siteList.value.filter(x=>x.regionCode==searchParams.regionCode);
-        }
+        result.list.map(x=>{
+          if(curRegionNameList.value.length>0){
+            curRegionNameList.value.map(m=> {
+              if(x.regionName == m){
+                siteList.value.push({value:x.siteName});
+              }
+            });
+          }else{
+            siteList.value.push({value:x.siteName});
+          }
+        });
       })
       })
     }
     }
 
 
+    const onShowJobUserInfo = (item:any) =>{
+      modalJobUserInfoRef.value.show(item.jobUserID);
+    }
+
     const onSelectChange = (selectedRowKeys: any) => {
     const onSelectChange = (selectedRowKeys: any) => {
       console.log(selectedRowKeys)
       console.log(selectedRowKeys)
       formState.selectedRowKeys = selectedRowKeys;
       formState.selectedRowKeys = selectedRowKeys;
@@ -322,19 +364,26 @@ export default defineComponent({
       searchParams.huntProfessionName = value;
       searchParams.huntProfessionName = value;
     }
     }
 
 
+    const curRegionNameListChange = ()=>{
+      curSiteNameList.value = [];
+      getAllSites();
+      onSearch();
+    }
+
     const onSearch = () => {
     const onSearch = () => {
       searchParams.parentProfessionID = searchParams.checkParentProfessionID ? parentProfessionID.value : '';
       searchParams.parentProfessionID = searchParams.checkParentProfessionID ? parentProfessionID.value : '';
+      searchParams.regionNameList  = curRegionNameList.value.join(',');
+      searchParams.siteNameList  = curSiteNameList.value.join(',');
       loadData();
       loadData();
     }
     }
 
 
-    get('system/area/getCityList', {}).then(data => {
-      regionList.value = data;
-    });
+
 
 
 
 
     const loadData = async function () {
     const loadData = async function () {
       formState.loading = true;
       formState.loading = true;
-      getAllSites();
+      await getRegionList();
+      await getAllSites();
       const result: any = await getRecommendJobList(searchParams);
       const result: any = await getRecommendJobList(searchParams);
       dataList.value = result.list;
       dataList.value = result.list;
       console.log(dataList);
       console.log(dataList);
@@ -451,6 +500,8 @@ export default defineComponent({
       regionList,
       regionList,
       dataList,
       dataList,
       professionList,
       professionList,
+      curRegionNameList,
+      curSiteNameList,
       cultureLevelList,
       cultureLevelList,
       addRecommendList,
       addRecommendList,
       keyPersonTypeList,
       keyPersonTypeList,
@@ -458,11 +509,14 @@ export default defineComponent({
       show,
       show,
       formatStr,
       formatStr,
       professionChange,
       professionChange,
+      curRegionNameListChange,
       onSearch,
       onSearch,
       showSalary,
       showSalary,
       onRecommend,
       onRecommend,
       onBatchRecommend,
       onBatchRecommend,
       onSelectChange,
       onSelectChange,
+      modalJobUserInfoRef,
+      onShowJobUserInfo,
       handleTableChange,
       handleTableChange,
       loadData,
       loadData,
       getCultureLevelList,
       getCultureLevelList,

+ 1 - 3
vue/src/views/jobUserManager/jobhunt/companyDetail.vue

@@ -26,9 +26,7 @@
         </a-descriptions-item>
         </a-descriptions-item>
         <a-descriptions-item label="注册资本">
         <a-descriptions-item label="注册资本">
           {{ dataModel.registeredCapital }}
           {{ dataModel.registeredCapital }}
-          <span v-if="dataModel.registeredCapital != null">
-          万元
-        </span>
+          <span v-if="dataModel.registeredCapital != null">万元</span>
         </a-descriptions-item>
         </a-descriptions-item>
         <a-descriptions-item label="注册地行政区划">{{ dataModel.signInPoliticalAreaName }}</a-descriptions-item>
         <a-descriptions-item label="注册地行政区划">{{ dataModel.signInPoliticalAreaName }}</a-descriptions-item>
         <a-descriptions-item label="所属行业">{{ dataModel.industryName }}</a-descriptions-item>
         <a-descriptions-item label="所属行业">{{ dataModel.industryName }}</a-descriptions-item>

+ 2 - 3
vue/src/views/jobUserManager/jobhunt/recommend.vue

@@ -31,7 +31,6 @@
           </a-col>
           </a-col>
           <a-col :span="6">
           <a-col :span="6">
             <a-form-item label="招聘企业" :label-col="{ span: 8 }" name="companyName">
             <a-form-item label="招聘企业" :label-col="{ span: 8 }" name="companyName">
-<!--              <a-input v-model:value="searchParams.companyName" placeholder=""/>-->
               <a-select ref="select" show-search optionFilterProp="label" allow-clear="true"
               <a-select ref="select" show-search optionFilterProp="label" allow-clear="true"
                         v-model:value="searchParams.companyName" >
                         v-model:value="searchParams.companyName" >
                 <a-select-option v-for="item in companyList" :label="item.companyName" :value="item.companyName"
                 <a-select-option v-for="item in companyList" :label="item.companyName" :value="item.companyName"
@@ -210,7 +209,7 @@ import {message, SelectProps} from "ant-design-vue";
 import {get} from "@/api/common";
 import {get} from "@/api/common";
 import {debounce} from "lodash-es";
 import {debounce} from "lodash-es";
 import {getSiteList} from "@/api/baseSettings/siteInfo";
 import {getSiteList} from "@/api/baseSettings/siteInfo";
-import {getRegionCodeList } from '@/api/system/area/index';
+import {getRegionCodeList} from '@/api/system/area/index';
 import {getSysDictionaryList} from "@/api/system/dictionary";
 import {getSysDictionaryList} from "@/api/system/dictionary";
 import CompanyDetailModel from "./companyDetail.vue";
 import CompanyDetailModel from "./companyDetail.vue";
 import PostDetailModel from "./postDetail.vue";
 import PostDetailModel from "./postDetail.vue";
@@ -268,7 +267,7 @@ export default defineComponent({
         regionList.value.push({value:x.name});
         regionList.value.push({value:x.name});
       });
       });
     };
     };
-    const getAllSites = () => {
+    const getAllSites = async function (){
       allSiteList.value = [];
       allSiteList.value = [];
       getSiteList({pageIndex:1,pageSize:9999}).then((result :any) => {
       getSiteList({pageIndex:1,pageSize:9999}).then((result :any) => {
         result.list.map(x=>{
         result.list.map(x=>{

+ 2 - 9
vue/src/views/jobUserManager/jobuser/vitae.vue

@@ -102,8 +102,8 @@
         <a-timeline style="margin-left: 25px;">
         <a-timeline style="margin-left: 25px;">
           <a-timeline-item v-for="(item, key) in experienceData" :key="key" position="left">
           <a-timeline-item v-for="(item, key) in experienceData" :key="key" position="left">
             <p>{{ dayjs(item.startTime).format('YYYY-MM-DD') }}至{{ dayjs(item.endTime).format('YYYY-MM-DD') }}</p>
             <p>{{ dayjs(item.startTime).format('YYYY-MM-DD') }}至{{ dayjs(item.endTime).format('YYYY-MM-DD') }}</p>
-            <p>{{ item.workAddress }}</p>
-            <p>{{ item.duties }}</p>
+            <p>工作单位:{{ item.workAddress }}</p>
+            <p>职务:{{ item.duties }}</p>
           </a-timeline-item>
           </a-timeline-item>
         </a-timeline>
         </a-timeline>
         <a-divider orientation="left">附件</a-divider>
         <a-divider orientation="left">附件</a-divider>
@@ -277,13 +277,6 @@ const loadEducation = (id: any) => {
 const loadExperienceData = (id: any) => {
 const loadExperienceData = (id: any) => {
   getExperienceList(id).then(data => {
   getExperienceList(id).then(data => {
     if (data) {
     if (data) {
-      data.sort((a, b) => {
-        // 将 startTime 字段转换为日期对象进行比较
-        const startTimeA = new Date(a.startTime);
-        const startTimeB = new Date(b.startTime);
-
-        return startTimeB - startTimeA;
-      })
       experienceData.value = data;
       experienceData.value = data;
     }
     }
   })
   })