Browse Source

Merge remote-tracking branch 'origin/master'

lizeyu 10 months ago
parent
commit
80cc9ad54c
30 changed files with 785 additions and 78 deletions
  1. 14 7
      h5app/src/utils/wechat.ts
  2. 4 2
      h5app/src/views/index.vue
  3. 1 1
      h5app/src/views/pages/wxMessage/jobUserInfo.vue
  4. 12 10
      src/main/java/com/hz/employmentsite/controller/companyService/CompanyController.java
  5. 3 1
      src/main/java/com/hz/employmentsite/controller/jobUserManager/JobHuntController.java
  6. 7 5
      src/main/java/com/hz/employmentsite/controller/jobUserManager/JobUserController.java
  7. 3 1
      src/main/java/com/hz/employmentsite/mapper/cquery/CompanyCQuery.java
  8. 6 1
      src/main/java/com/hz/employmentsite/mapper/cquery/JobUserCQuery.java
  9. 7 4
      src/main/java/com/hz/employmentsite/services/impl/companyService/CompanyServiceImpl.java
  10. 10 9
      src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobUserServiceImpl.java
  11. 5 1
      src/main/java/com/hz/employmentsite/services/service/companyService/CompanyService.java
  12. 6 1
      src/main/java/com/hz/employmentsite/services/service/jobUserManager/JobUserService.java
  13. 61 0
      src/main/java/com/hz/employmentsite/util/DateUtils.java
  14. 4 1
      src/main/java/com/hz/employmentsite/vo/jobUserManager/JobUserVo.java
  15. 1 0
      src/main/java/com/hz/employmentsite/vo/jobUserManager/RecommendMgtVo.java
  16. 6 0
      src/main/resources/mapping/cquery/CompanyCQuery.xml
  17. 8 4
      src/main/resources/mapping/cquery/DoWorkCQuery.xml
  18. 20 12
      src/main/resources/mapping/cquery/JobHuntCQuery.xml
  19. 10 1
      src/main/resources/mapping/cquery/JobUserCQuery.xml
  20. 1 0
      src/main/resources/mapping/cquery/RecommendMgtCQuery.xml
  21. 1 0
      vue/src/router/asyncModules/basesettings.ts
  22. 1 0
      vue/src/router/asyncModules/jobUserManager.ts
  23. 90 0
      vue/src/views/baseSettings/institution/detail.vue
  24. 13 6
      vue/src/views/baseSettings/institution/index.vue
  25. 180 0
      vue/src/views/companyService/company/CompanyTableCom.vue
  26. 61 0
      vue/src/views/jobUserManager/jobhunt/detail.vue
  27. 12 5
      vue/src/views/jobUserManager/jobhunt/index.vue
  28. 168 0
      vue/src/views/jobUserManager/jobuser/JobUserTableCom.vue
  29. 19 4
      vue/src/views/jobUserManager/jobuser/edit.vue
  30. 51 2
      vue/src/views/taskAndLog/dowork/index.vue

+ 14 - 7
h5app/src/utils/wechat.ts

@@ -18,21 +18,28 @@ export const wxAuth = async <Object>(redirectUrl: string): Promise<string> => {
             })
             const urlParams = getUrlParams() as any;
             const code = urlParams["code"];
-            const loading = await loadingController.create({
-                cssClass: 'my-custom-class',
-                message: '微信授权中,请稍后...',
-                duration: 2000,
-            });
-            await loading.present();
+
             if (!code) {
+                const loading = await loadingController.create({
+                    cssClass: 'my-custom-class',
+                    message: '微信授权中,请稍等...',
+                    duration: 2000,
+                });
+                await loading.present();
                 getOAuthUrl(encodeURIComponent(redirectUrl)).then((res: any) => {
                     if (res) {
-                        window.location.href = res;
+                        window.location.replace(res);
                     } else {
                         presentAlert("微信授权失败!");
                     }
                 });
             } else {
+                const loading = await loadingController.create({
+                    cssClass: 'my-custom-class',
+                    message: '微信授权成功,请稍等...',
+                    duration: 2000,
+                });
+                await loading.present();
                 await getWxOpenId(code).then((res: any) => {
                     userStore.setOpenId(res);
                 });

+ 4 - 2
h5app/src/views/index.vue

@@ -1,5 +1,7 @@
 <template>
-  <div></div>
+  <div>
+    系统加载中,请稍等...
+  </div>
 </template>
 <script>
 import {defineComponent, ref} from "vue";
@@ -25,7 +27,7 @@ export default defineComponent({
       await wxAuth(redirectUrl);
     };
 
-    if (isWechat()) {
+    if (isWechat() && redirectUrl.indexOf("wxMessage") < 0) {
       wxLogin().then(res => {
         router.push(redirectUrl);
       });

+ 1 - 1
h5app/src/views/pages/wxMessage/jobUserInfo.vue

@@ -28,7 +28,7 @@
           <p>学历</p>
         </div>
         <div>
-          <h6>{{jobUserInfo.age}}</h6>
+          <h6>{{jobMgrModel.workYear}}</h6>
           <p>经验</p>
         </div>
       </div>

+ 12 - 10
src/main/java/com/hz/employmentsite/controller/companyService/CompanyController.java

@@ -5,23 +5,24 @@ import com.hz.employmentsite.filter.exception.BaseErrorEnum;
 import com.hz.employmentsite.filter.exception.BaseException;
 import com.hz.employmentsite.filter.exception.BaseResponse;
 import com.hz.employmentsite.filter.exception.RespGenerstor;
-import com.hz.employmentsite.model.PcCompany;
-import com.hz.employmentsite.mapper.PcSiteMapper;
 import com.hz.employmentsite.mapper.PcSiteUserMapper;
+import com.hz.employmentsite.model.PcCompany;
 import com.hz.employmentsite.model.PcSite;
-import com.hz.employmentsite.model.PcSiteExample;
 import com.hz.employmentsite.model.PcSiteUserExample;
+import com.hz.employmentsite.services.service.AccountService;
+import com.hz.employmentsite.services.service.companyService.CompanyService;
 import com.hz.employmentsite.util.DateUtils;
 import com.hz.employmentsite.util.ExcelHelper;
 import com.hz.employmentsite.vo.companyService.AppCompanyPostVo;
+import com.hz.employmentsite.vo.companyService.CompanyVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import com.hz.employmentsite.services.service.companyService.CompanyService;
-import com.hz.employmentsite.services.service.AccountService;
-import com.hz.employmentsite.vo.companyService.CompanyVo;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
 
 @RestController
 @RequestMapping("/api/companyService/company")
@@ -45,9 +46,10 @@ public class CompanyController {
     public BaseResponse<PageInfo<CompanyVo>> getList(@RequestParam("pageIndex") int pageIndex, @RequestParam("pageSize") int pageSize,
                                                      @RequestParam(required = false) List<String> companyIDList, @RequestParam(required = false) String companyName,
                                                      @RequestParam(required = false) String companyCode, @RequestParam(required = false) String recordStatus,
-                                                     @RequestParam(required = false) String regionCode, @RequestParam(required = false) String streetCode) {
+                                                     @RequestParam(required = false) String regionCode, @RequestParam(required = false) String streetCode,
+                                                     @RequestParam(required = false) String createUserId, @RequestParam(required = false) String workTime) {
 
-        PageInfo<CompanyVo> result = companyService.getList(pageIndex, pageSize, companyIDList, companyName, companyCode, recordStatus, regionCode, streetCode);
+        PageInfo<CompanyVo> result = companyService.getList(pageIndex, pageSize, companyIDList, companyName, companyCode, recordStatus, regionCode, streetCode, createUserId, workTime);
 
         return RespGenerstor.success(result);
     }
@@ -107,7 +109,7 @@ public class CompanyController {
                                @RequestParam(required = false) String companyCode, @RequestParam(required = false) String recordStatus,
                                @RequestParam(required = false) String regionCode, @RequestParam(required = false) String streetCode
     ) throws Exception {
-        PageInfo<CompanyVo> result = companyService.getList(pageIndex, pageSize, companyIDList, companyName, companyCode, recordStatus, regionCode, streetCode);
+        PageInfo<CompanyVo> result = companyService.getList(pageIndex, pageSize, companyIDList, companyName, companyCode, recordStatus, regionCode, streetCode, null, null);
         if (isExport == null || !isExport) {
             return RespGenerstor.success(result);
         } else {

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

@@ -11,6 +11,7 @@ import com.hz.employmentsite.util.ExcelHelper;
 import com.hz.employmentsite.vo.jobUserManager.JobHuntVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.util.*;
@@ -93,7 +94,7 @@ public class JobHuntController {
 
         PageInfo<JobHuntVo> result = jobhuntService.getList(pageIndex, pageSize,jobHuntIDList,jobUserID,jobUserName,workName,minWorkYear, maxWorkYear, jobHuntTypeID, jobUserTypeID, minSalary, maxSalary, isAccomplish);
         ExcelHelper.ExcelData data = excelHelper.new ExcelData();
-        data.setTitles(Arrays.asList(new String[]{"序号","姓名", "希望工作地区", "可到职日期","工作年限", "求职类型", "人才类型", "月薪要求"}));
+        data.setTitles(Arrays.asList(new String[]{"序号", "姓名", "希望工作地区", "可到职日期", "工作年限", "求职类型", "求职岗位", "人才类型", "月薪要求"}));
         int i = 0;
         List<List<Object>> rowDatas = new ArrayList();
         for (JobHuntVo item : result.getList()) {
@@ -105,6 +106,7 @@ public class JobHuntController {
             row.add(dataUtils.dateToStrFormat(item.inDate,"yyyy-MM-dd"));
             row.add(item.workYear);
             row.add(item.jobHuntTypeStr);
+            row.add(item.professionName);
             row.add(item.jobUserTypeStr);
             row.add(item.minSalary+"-"+item.maxSalary);
             rowDatas.add(row);

+ 7 - 5
src/main/java/com/hz/employmentsite/controller/jobUserManager/JobUserController.java

@@ -16,6 +16,7 @@ import com.hz.employmentsite.util.ExcelHelper;
 import com.hz.employmentsite.vo.jobUserManager.JobUserVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -43,9 +44,10 @@ public class JobUserController {
                                 @RequestParam(required = false) List<String> jobUserIDList,
                                 @RequestParam(required = false) String name, @RequestParam(required = false) String siteID,
                                 @RequestParam(required = false) String jobStatus, @RequestParam(required = false) Integer sexId,
-                                @RequestParam(required = false) Integer educationTypeId, @RequestParam(required = false) Integer emphasisTypeId) {
+                                @RequestParam(required = false) Integer educationTypeId, @RequestParam(required = false) Integer emphasisTypeId,
+                                @RequestParam(required = false) String createUserId, @RequestParam(required = false) String workTime) {
 
-        PageInfo<JobUserVo> result = jobuserService.getList(pageIndex, pageSize, jobUserIDList, name, siteID, jobStatus, sexId, educationTypeId, emphasisTypeId);
+        PageInfo<JobUserVo> result = jobuserService.getList(pageIndex, pageSize, jobUserIDList, name, siteID, jobStatus, sexId, educationTypeId, emphasisTypeId, createUserId, workTime);
         return RespGenerstor.success(result);
     }
 
@@ -127,14 +129,14 @@ public class JobUserController {
                                @RequestParam(required = false) String name, @RequestParam(required = false) String siteId, @RequestParam(required = false) String jobStatus,
                                @RequestParam(required = false) Integer sexId,@RequestParam(required = false) Integer educationTypeId,
                                @RequestParam(required = false) Integer emphasisTypeId) throws Exception {
-        PageInfo<JobUserVo> result = jobuserService.getList(pageIndex, pageSize, jobUserIDList, name, siteId, jobStatus, sexId, educationTypeId, emphasisTypeId);
+        PageInfo<JobUserVo> result = jobuserService.getList(pageIndex, pageSize, jobUserIDList, name, siteId, jobStatus, sexId, educationTypeId, emphasisTypeId, null, null);
 
         if(isExport == null || !isExport){
             return RespGenerstor.success(result);
         }else{
             ExcelHelper excelHelper = new ExcelHelper();
             ExcelHelper.ExcelData data = excelHelper.new ExcelData();
-            data.setTitles(Arrays.asList(new String[]{"序号", "姓名", "公民身份号码","性别", "民族", "联系电话", "所属驿站", "出生日期", "文化程度", "地址", "就业状态", "重点人员类别"}));
+            data.setTitles(Arrays.asList(new String[]{"序号", "姓名", "公民身份号码", "性别", "民族", "联系电话", "所属驿站", "年龄", "文化程度", "地址", "就业状态", "重点人员类别"}));
             int i = 0;
             List<List<Object>> rowDatas = new ArrayList();
             for (JobUserVo item : result.getList()) {
@@ -147,7 +149,7 @@ public class JobUserController {
                 row.add(item.getNation());
                 row.add(item.getUserMobile());
                 row.add(item.siteName);
-                row.add(dateUtils.dateToStr(item.getBirthDay()));
+                row.add(dateUtils.getAgeForIdCard(item.getIdentityNumber()));
                 row.add(item.cultureName);
                 row.add(item.getAddress());
                 row.add(item.jobStatusName);

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

@@ -2,10 +2,12 @@ package com.hz.employmentsite.mapper.cquery;
 
 import com.hz.employmentsite.vo.companyService.CompanyVo;
 import org.apache.ibatis.annotations.Param;
+
 import java.util.List;
 
 public interface CompanyCQuery {
     List<CompanyVo> getList(@Param("companyIDList") String companyIDList, @Param("companyName") String companyName,
                             @Param("companyCode") String companyCode, @Param("recordStatus") String recordStatus,
-                            @Param("regionCode") String regionCode, @Param("streetCode") String streetCode);
+                            @Param("regionCode") String regionCode, @Param("streetCode") String streetCode,
+                            @Param("createUserId") String createUserId, @Param("workTime") String workTime);
 }

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

@@ -2,8 +2,13 @@ package com.hz.employmentsite.mapper.cquery;
 
 import com.hz.employmentsite.vo.jobUserManager.JobUserVo;
 import org.apache.ibatis.annotations.Param;
+
 import java.util.List;
 
 public interface JobUserCQuery {
-    List<JobUserVo> selectJobUserList(@Param("jobUserIDList") String jobUserIDList,@Param("name") String name, @Param("siteId")String siteId, @Param("jobStatus")String jobStatus, @Param("sexId")Integer sexId, @Param("educationTypeId")Integer educationTypeId, @Param("emphasisTypeId")Integer emphasisTypeId);
+    List<JobUserVo> selectJobUserList(@Param("jobUserIDList") String jobUserIDList, @Param("name") String name,
+                                      @Param("siteId") String siteId, @Param("jobStatus") String jobStatus,
+                                      @Param("sexId") Integer sexId, @Param("educationTypeId") Integer educationTypeId,
+                                      @Param("emphasisTypeId") Integer emphasisTypeId, @Param("createUserId") String createUserId,
+                                      @Param("workTime") String workTime);
 }

+ 7 - 4
src/main/java/com/hz/employmentsite/services/impl/companyService/CompanyServiceImpl.java

@@ -17,7 +17,6 @@ import com.hz.employmentsite.vo.companyService.CompanyVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.awt.image.DataBufferByte;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -51,9 +50,13 @@ public class CompanyServiceImpl implements CompanyService {
     private PcPostMapper pcPostMapper;
 
     @Override
-    public PageInfo<CompanyVo> getList(Integer pageIndex, Integer pageSize,List<String> companyIDList, String companyName, String companyCode, String recordStatus, String regionCode, String streetCode) {
+    public PageInfo<CompanyVo> getList(Integer pageIndex, Integer pageSize,
+                                       List<String> companyIDList, String companyName,
+                                       String companyCode, String recordStatus,
+                                       String regionCode, String streetCode,
+                                       String createUserId, String workTime) {
         PageHelper.startPage(pageIndex, pageSize);
-        List<CompanyVo> dataList = companyCQuery.getList(stringUtils.ListToInSql(companyIDList), companyName, companyCode, recordStatus, regionCode, streetCode);
+        List<CompanyVo> dataList = companyCQuery.getList(stringUtils.ListToInSql(companyIDList), companyName, companyCode, recordStatus, regionCode, streetCode, createUserId, workTime);
         PageInfo<CompanyVo> result = new PageInfo(dataList);
         return result;
     }
@@ -189,7 +192,7 @@ public class CompanyServiceImpl implements CompanyService {
         }else{
             ids.add(id);
         }
-        return  companyCQuery.getList(stringUtils.ListToInSql(ids), null, null, null, null, null).stream().findFirst().orElse(null);
+        return companyCQuery.getList(stringUtils.ListToInSql(ids), null, null, null, null, null, null, null).stream().findFirst().orElse(null);
     }
 
     @Override

+ 10 - 9
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobUserServiceImpl.java

@@ -3,11 +3,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.PcEducationMapper;
-import com.hz.employmentsite.mapper.PcExperienceMapper;
-import com.hz.employmentsite.mapper.PcJobuserMapper;
-import com.hz.employmentsite.mapper.PcJobhuntMapper;
-import com.hz.employmentsite.mapper.PcPostMapper;
+import com.hz.employmentsite.mapper.*;
 import com.hz.employmentsite.mapper.cquery.JobUserCQuery;
 import com.hz.employmentsite.model.*;
 import com.hz.employmentsite.services.service.jobUserManager.JobUserService;
@@ -42,10 +38,15 @@ public class JobUserServiceImpl implements JobUserService {
     private PcPostMapper pcPostMapper;
 
     @Override
-    public PageInfo<JobUserVo> getList(Integer pageIndex, Integer pageSize, List<String> jobUserIDList, String name, String siteId, String jobStatus, Integer sexId, Integer educationTypeId, Integer emphasisTypeId) {
+    public PageInfo<JobUserVo> getList(Integer pageIndex, Integer pageSize,
+                                       List<String> jobUserIDList, String name,
+                                       String siteId, String jobStatus,
+                                       Integer sexId, Integer educationTypeId,
+                                       Integer emphasisTypeId, String createUserId,
+                                       String workTime) {
         PageHelper.startPage(pageIndex, pageSize);
 
-        List<JobUserVo> list = jobUserCQuery.selectJobUserList(stringUtils.ListToInSql(jobUserIDList), name, siteId, jobStatus, sexId, educationTypeId, emphasisTypeId);
+        List<JobUserVo> list = jobUserCQuery.selectJobUserList(stringUtils.ListToInSql(jobUserIDList), name, siteId, jobStatus, sexId, educationTypeId, emphasisTypeId, createUserId, workTime);
 
         PageInfo<JobUserVo> result = new PageInfo(list);
 
@@ -54,7 +55,7 @@ public class JobUserServiceImpl implements JobUserService {
 
     @Override
     public List<SelectProps> getDataList() {
-        var dataList = getList(1,99999,null,null,null,null,null,null,null).getList();
+        var dataList = getList(1, 99999, null, null, null, null, null, null, null, null, null).getList();
         List<SelectProps> dataResult = new ArrayList<>();
         for (var item: dataList) {
             SelectProps  itemResult = new SelectProps();
@@ -73,7 +74,7 @@ public class JobUserServiceImpl implements JobUserService {
         }else{
             ids.add(id);
         }
-        return jobUserCQuery.selectJobUserList(stringUtils.ListToInSql(ids), null, null, null, null, null, null).stream().findFirst().orElse(null);
+        return jobUserCQuery.selectJobUserList(stringUtils.ListToInSql(ids), null, null, null, null, null, null, null, null).stream().findFirst().orElse(null);
     }
 
     @Override

+ 5 - 1
src/main/java/com/hz/employmentsite/services/service/companyService/CompanyService.java

@@ -10,7 +10,11 @@ import java.util.List;
 
 public interface CompanyService {
 
-    PageInfo<CompanyVo> getList(Integer pageIndex, Integer pageSize, List<String> companyIDList, String companyName, String companyCode, String recordStatus, String regionCode, String streetCode);
+    PageInfo<CompanyVo> getList(Integer pageIndex, Integer pageSize,
+                                List<String> companyIDList, String companyName,
+                                String companyCode, String recordStatus,
+                                String regionCode, String streetCode,
+                                String createUserId, String workTime);
 
     List<PcCompany> getCompanyBySiteIDList(String siteID);
 

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

@@ -10,7 +10,12 @@ import com.hz.employmentsite.vo.jobUserManager.JobUserVo;
 import java.util.List;
 
 public interface JobUserService {
-    PageInfo<JobUserVo> getList(Integer pageIndex, Integer pageSize,List<String> jobUserIDList, String name, String siteId, String jobStatus,Integer sexId,Integer educationTypeId,Integer emphasisTypeId);
+    PageInfo<JobUserVo> getList(Integer pageIndex, Integer pageSize,
+                                List<String> jobUserIDList, String name,
+                                String siteId, String jobStatus,
+                                Integer sexId, Integer educationTypeId,
+                                Integer emphasisTypeId, String createUserId,
+                                String workTime);
 
     JobUserVo getDataById(String id);
 

+ 61 - 0
src/main/java/com/hz/employmentsite/util/DateUtils.java

@@ -396,7 +396,68 @@ public class DateUtils {
                         && rightStartDate.getTime() <= leftEndDate.getTime());
 
     }
+
     public Date formatDateToYYYYMMDD(Date date) {
         return this.StrToDate(this.dateToStrFormat(date, "yyyy-MM-dd") + " 00:00:00");
     }
+
+    /**
+     * 计算年龄
+     *
+     * @param birthdayString 生日日期
+     * @return 年龄
+     */
+    public Integer calculateAge(String birthdayString) {
+        if (birthdayString.isEmpty() || birthdayString.isBlank()) {
+            return null;
+        }
+
+        // 将生日字符串解析为LocalDate对象
+        LocalDate birthday = LocalDate.parse(birthdayString);
+
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+
+        // 使用Period.between()计算生日和今天之间的时期差异
+        Period period = Period.between(birthday, today);
+
+        // 返回年份差异,即年龄
+        return period.getYears();
+    }
+
+    /**
+     * 根据身份证的号码算出当前身份证持有者的年龄
+     *
+     * @param idCard 身份证号码
+     * @return 年龄
+     */
+    public int getAgeForIdCard(String idCard) {
+        try {
+            int age = 0;
+            if (idCard.isEmpty() || idCard.isBlank()) {
+                return age;
+            }
+
+            String birth = "";
+            if (idCard.length() == 18) {
+                birth = idCard.substring(6, 14);
+            } else if (idCard.length() == 15) {
+                birth = "19" + idCard.substring(6, 12);
+            }
+
+            int year = Integer.valueOf(birth.substring(0, 4));
+            int month = Integer.valueOf(birth.substring(4, 6));
+            int day = Integer.valueOf(birth.substring(6));
+            Calendar cal = Calendar.getInstance();
+            age = cal.get(Calendar.YEAR) - year;
+            //周岁计算
+            if (cal.get(Calendar.MONTH) < (month - 1) || (cal.get(Calendar.MONTH) == (month - 1) && cal.get(Calendar.DATE) < day)) {
+                age--;
+            }
+            return age;
+        } catch (Exception e) {
+            e.getMessage();
+        }
+        return 0;
+    }
 }

+ 4 - 1
src/main/java/com/hz/employmentsite/vo/jobUserManager/JobUserVo.java

@@ -1,7 +1,8 @@
 package com.hz.employmentsite.vo.jobUserManager;
 
-import lombok.Data;
 import com.hz.employmentsite.util.datarange.annotations.JobUserID;
+import lombok.Data;
+
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -32,6 +33,8 @@ public class JobUserVo {
 
     private Date birthDay;
 
+    private Integer age;
+
     private Integer familyNatureID;
 
     private Integer cultureRank;

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

@@ -22,4 +22,5 @@ public class RecommendMgtVo extends PcRecommendMgt {
     public String genderName;
     public String jobuserId;
     public String companyId;
+    public Integer workYear;
 }

+ 6 - 0
src/main/resources/mapping/cquery/CompanyCQuery.xml

@@ -32,6 +32,12 @@
         <if test="streetCode!='' and regionCode!=null">
             and company.streetCode like Concat('%',#{streetCode},'%')
         </if>
+        <if test="createUserId!='' and createUserId!=null">
+            and company.CreateUserID = #{createUserId}
+        </if>
+        <if test="workTime!='' and workTime!=null">
+            and Date(company.CreateTime) = Date(#{workTime})
+        </if>
         order by company.CreateTime desc,postCount desc
     </select>
 

+ 8 - 4
src/main/resources/mapping/cquery/DoWorkCQuery.xml

@@ -2,16 +2,20 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.hz.employmentsite.mapper.cquery.DoWorkCQuery">
     <select id="getList" resultType="com.hz.employmentsite.vo.taskAndLog.DoWorkVo">
-        select workLog.*,siteUser.SiteUserName as UserName,siteUser.UserId as UserId, region.name as RegionName,street.name as
+        select workLog.*,siteUser.SiteUserName as UserName,siteUser.UserId as UserId, region.name as
+        RegionName,street.name as
         StreetName,dic_logType.name as LogTypeName,
         (
-        SELECT COUNT(company.CompanyID) FROM pc_company company WHERE company.CreateUserID = workLog.CreateUserID AND DATE(company.CreateTime) = DATE(workLog.WorkTime)
+        SELECT COUNT(company.CompanyID) FROM pc_company company WHERE company.CreateUserID = siteUser.UserId AND
+        DATE(company.CreateTime) = DATE(workLog.WorkTime)
         ) AS RecordsCompanyNum,
         (
-        SELECT COUNT(jobuser.JobuserID) FROM pc_jobuser jobuser WHERE jobuser.CreateUserID = workLog.CreateUserID AND DATE(jobuser.CreateTime) = DATE(workLog.WorkTime)
+        SELECT COUNT(jobuser.JobuserID) FROM pc_jobuser jobuser WHERE jobuser.CreateUserID = siteUser.UserId AND
+        DATE(jobuser.CreateTime) = DATE(workLog.WorkTime)
         ) AS RecordsJobuserNum
         from pc_dowork workLog
-        left join (select * from sys_dictionary_item where DictionaryCode ='LogType' ) dic_logType on workLog.doTypeID = dic_logType.Value
+        left join (select * from sys_dictionary_item where DictionaryCode ='LogType' ) dic_logType on workLog.doTypeID =
+        dic_logType.Value
         left join area_code region on workLog.RegionCode = region.code
         left join area_code street on workLog.StreetCode = street.code
         left join pc_site_user siteUser on workLog.SiteUserID = siteUser.SiteUserID

+ 20 - 12
src/main/resources/mapping/cquery/JobHuntCQuery.xml

@@ -2,7 +2,10 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.hz.employmentsite.mapper.cquery.JobHuntCQuery">
     <select id="getJobHuntList" resultType="com.hz.employmentsite.vo.jobUserManager.JobHuntVo">
-        select jobHunt.JobHuntID, jobHunt.JobUserID, jobHunt.ProfessionID, jobHunt.WorkCode, jobHunt.WorkName, jobHunt.AreaWork, jobHunt.InDate, jobHunt.WorkYear, jobHunt.JobHuntType, jobHunt.JobUserType, jobHunt.MinSalary, jobHunt.MaxSalary, jobHunt.CreateUserID, jobHunt.CreateTime, jobHunt.ModifyUserID, jobHunt.ModifyTime, jobHunt.OtherDemand
+        select jobHunt.JobHuntID, jobHunt.JobUserID, jobHunt.ProfessionID, jobHunt.WorkCode, jobHunt.WorkName,
+        jobHunt.AreaWork, jobHunt.InDate, jobHunt.WorkYear, jobHunt.JobHuntType, jobHunt.JobUserType, jobHunt.MinSalary,
+        jobHunt.MaxSalary, jobHunt.CreateUserID, jobHunt.CreateTime, jobHunt.ModifyUserID, jobHunt.ModifyTime,
+        jobHunt.OtherDemand
         ,jobUser.name as JobUserName,dic_jobUserType.Name as jobUserTypeStr,dic_huntJobType.Name as jobHuntTypeStr
         ,profession.ProfessionName, profession.ParentProfessionID, IFNULL(count(rmgt.RecommendMgtID),0) as recommendNum
         ,jobUser.cultureRank
@@ -10,8 +13,10 @@
         left join pc_jobuser jobUser on jobHunt.JobUserID = jobUser.JobUserID
         left join pc_profession profession on jobHunt.professionID = profession.professionID
         left join pc_recommend_mgt rmgt on jobHunt.JobHuntID = rmgt.JobHuntID
-        left join (select * from sys_dictionary_item where DictionaryCode ='JobUserType') dic_jobUserType on jobHunt.JobUserType = dic_jobUserType.value
-        left join (select * from sys_dictionary_item where DictionaryCode ='JobHuntType') dic_huntJobType on jobHunt.JobHuntType = dic_huntJobType.value
+        left join (select * from sys_dictionary_item where DictionaryCode ='JobUserType') dic_jobUserType on
+        jobHunt.JobUserType = dic_jobUserType.value
+        left join (select * from sys_dictionary_item where DictionaryCode ='JobHuntType') dic_huntJobType on
+        jobHunt.JobHuntType = dic_huntJobType.value
         where 1=1
         <if test="jobHuntIDList != '' and jobHuntIDList != null">
             and jobHunt.JobHuntID in (${jobHuntIDList})
@@ -37,20 +42,23 @@
         <if test="jobUserTypeID != '' and jobUserTypeID != null">
             and jobUserType = #{jobUserTypeID}
         </if>
-        <if test="minSalary != '' and minSalary != null and (maxSalary == '' or maxSalary == null)" >
-            and jobHunt.minSalary <![CDATA[ >= ]]> #{minSalary} and jobHunt.maxSalary <![CDATA[ >= ]]> #{minSalary}
+        <if test="minSalary != '' and minSalary != null and (maxSalary == '' or maxSalary == null)">
+            and jobHunt.minSalary <![CDATA[ >= ]]> #{minSalary}
         </if>
         <if test="maxSalary != '' and maxSalary != null and (minSalary == '' or minSalary == null)">
-            and jobHunt.minSalary <![CDATA[ <= ]]> #{maxSalary} and jobHunt.maxSalary <![CDATA[ >= ]]> #{maxSalary}
+            and jobHunt.maxSalary <![CDATA[ <= ]]> #{maxSalary}
         </if>
         <if test="minSalary != '' and minSalary != null and maxSalary != '' and maxSalary != null">
-            and (jobHunt.minSalary <![CDATA[ <= ]]> #{maxSalary})
-            or  (jobHunt.minSalary <![CDATA[ <= ]]> #{minSalary} and jobHunt.maxSalary <![CDATA[ >= ]]> #{minSalary})
+            and
+            (jobHunt.minSalary <![CDATA[ >= ]]> #{minSalary} and jobHunt.maxSalary <![CDATA[ <= ]]> #{maxSalary})
         </if>
-       <!-- <if test="isAccomplish != '' and isAccomplish != null">
-            and isAccomplish = #{isAccomplish}
-        </if>-->
-        group by jobHunt.JobHuntID, jobHunt.JobUserID, jobHunt.ProfessionID, jobHunt.WorkCode, jobHunt.WorkName, jobHunt.AreaWork, jobHunt.InDate, jobHunt.WorkYear, jobHunt.JobHuntType, jobHunt.JobUserType, jobHunt.MinSalary, jobHunt.MaxSalary, jobHunt.CreateUserID, jobHunt.CreateTime, jobHunt.ModifyUserID, jobHunt.ModifyTime, jobHunt.OtherDemand
+        <if test="isAccomplish != '' and isAccomplish != null">
+            and rmgt.EntryState = #{isAccomplish}
+        </if>
+        group by jobHunt.JobHuntID, jobHunt.JobUserID, jobHunt.ProfessionID, jobHunt.WorkCode, jobHunt.WorkName,
+        jobHunt.AreaWork, jobHunt.InDate, jobHunt.WorkYear, jobHunt.JobHuntType, jobHunt.JobUserType, jobHunt.MinSalary,
+        jobHunt.MaxSalary, jobHunt.CreateUserID, jobHunt.CreateTime, jobHunt.ModifyUserID, jobHunt.ModifyTime,
+        jobHunt.OtherDemand
         ,jobUser.`Name`,dic_jobUserType.`Name`,dic_huntJobType.`Name`, profession.ProfessionName, profession.ParentProfessionID,jobUser.cultureRank
         order by jobHunt.CreateTime desc
     </select>

+ 10 - 1
src/main/resources/mapping/cquery/JobUserCQuery.xml

@@ -3,7 +3,10 @@
 <mapper namespace="com.hz.employmentsite.mapper.cquery.JobUserCQuery">
     <select id="selectJobUserList" resultType="com.hz.employmentsite.vo.jobUserManager.JobUserVo">
         select  jobuser.* ,gender.name as GenderName,culture.name as CultureName,site.SiteName,jobstatus.name as JobStatusName,keytype.name as KeyTypeName,
-        (select count(*) from pc_recommend recommend where jobuser.JobUserID = recommend.JobuserID and isRead = 1)as RecommendedCount from pc_jobuser jobuser
+        (select count(*) from pc_recommend recommend where jobuser.JobUserID = recommend.JobuserID and isRead = 1)as RecommendedCount
+        ,case when jobuser.IdentityNumber is not null and jobuser.IdentityNumber <![CDATA[ <> ]]>'' then TIMESTAMPDIFF(YEAR,STR_TO_DATE(SUBSTRING(jobuser.IdentityNumber, 7, 8),'%Y%m%d'),CURRENT_DATE())
+         else null end as age
+        from pc_jobuser jobuser
         left join pc_site site on site.SiteID = jobuser.SiteID
         left join sys_dictionary_item culture on jobuser.CultureRank = culture.value and culture.DictionaryCode='CultureLevel'
         left join sys_dictionary_item gender  on jobuser.Sex = gender.value and gender.DictionaryCode='Gender'
@@ -31,6 +34,12 @@
         <if test="emphasisTypeId != null and emphasisTypeId != ''">
             and jobuser.KeyPersonTypeID = #{emphasisTypeId}
         </if>
+        <if test="createUserId != null and createUserId != ''">
+            and jobuser.CreateUserID = #{createUserId}
+        </if>
+        <if test="workTime!='' and workTime!=null">
+            and Date(jobuser.CreateTime) = Date(#{workTime})
+        </if>
         order by jobuser.CreateTime desc
     </select>
 </mapper>

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

@@ -9,6 +9,7 @@
         dic1.`name` as recommendtypename,dic2.`name` as entrystatename,dic3.`name` as postisreadname,
         dic4.`name` as jobpeopleisreadname,g.`name` as pushname, dic5.`name` as gendername
         ,e.jobuserId,c.companyId
+        ,d.workYear
         from pc_recommend_mgt a
         left join pc_post b on a.PostID = b.PostID
         left join pc_company c on b.CompanyID = c.CompanyID

+ 1 - 0
vue/src/router/asyncModules/basesettings.ts

@@ -2,6 +2,7 @@ export default {
   'baseSettings/institution/index': () => import('@/views/baseSettings/institution/index.vue'),
   'baseSettings/institution/add': () => import('@/views/baseSettings/institution/edit.vue'),
   'baseSettings/institution/edit': () => import('@/views/baseSettings/institution/edit.vue'),
+  'baseSettings/institution/detail': () => import('@/views/baseSettings/institution/detail.vue'),
   'baseSettings/site/index': () => import('@/views/baseSettings/siteInfo/index.vue'),
   'baseSettings/site/add': () => import('@/views/baseSettings/siteInfo/edit.vue'),
   'baseSettings/site/edit': () => import('@/views/baseSettings/siteInfo/edit.vue'),

+ 1 - 0
vue/src/router/asyncModules/jobUserManager.ts

@@ -5,6 +5,7 @@ export default {
   'views/jobusermgr/jobhunt/index': () => import('@/views/jobUserManager/jobhunt/index.vue'),
   'views/jobusermgr/jobhunt/add': () => import('@/views/jobUserManager/jobhunt/edit.vue'),
   'views/jobusermgr/jobhunt/edit': () => import('@/views/jobUserManager/jobhunt/edit.vue'),
+  'views/jobusermgr/jobhunt/detail': () => import('@/views/jobUserManager/jobhunt/detail.vue'),
   'views/jobusermgr/jobhunt/recommend': () => import('@/views/jobUserManager/jobhunt/recommend.vue'),
   'views/jobusermgr/recommend/index': () => import('@/views/jobUserManager/recommend/index.vue'),
   'views/jobusermgr/recommendMgt/index': () => import('@/views/jobUserManager/recommendMgt/index.vue')

+ 90 - 0
vue/src/views/baseSettings/institution/detail.vue

@@ -0,0 +1,90 @@
+<template>
+  <div class="card-edit">
+    <a-divider orientation="left">运营机构基本信息</a-divider>
+    <a-descriptions bordered>
+      <a-descriptions-item label="企业名称">{{ institutionInfo.companyName }}</a-descriptions-item>
+      <a-descriptions-item label="企业地址">{{ institutionInfo.companyAddress }}</a-descriptions-item>
+      <a-descriptions-item label="负责人姓名">{{ institutionInfo.fzrName }}</a-descriptions-item>
+      <a-descriptions-item label="负责人电话">{{ institutionInfo.fzrMobile }}</a-descriptions-item>
+      <a-descriptions-item label="法人姓名">{{ institutionInfo.frName }}</a-descriptions-item>
+      <a-descriptions-item label="法人电话">{{ institutionInfo.frMobile }}</a-descriptions-item>
+      <a-descriptions-item label="企业机构代码">{{ institutionInfo.companyCode }}</a-descriptions-item>
+    </a-descriptions>
+    <a-divider orientation="left">管理驿站 共计:{{ manageSiteList.length }}</a-divider>
+    <a-table :columns="manageSitesTabColumns" :data-source="manageSiteList" :scroll="{ x:'100%', y: 200 }"
+             bordered>
+    </a-table>
+    <a-divider orientation="left">其他信息</a-divider>
+    <a-descriptions bordered>
+      <a-descriptions-item :span="3" label="企业简介">{{ institutionInfo.companyDesc }}</a-descriptions-item>
+      <a-descriptions-item :span="3" label="备注">{{ institutionInfo.remark }}</a-descriptions-item>
+    </a-descriptions>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {onMounted, reactive, ref} from "vue";
+import {getInstitutionByID} from "@/api/baseSettings/institution";
+import {getListByInstitutionID} from "@/api/baseSettings/siteInfo";
+
+// 运营机构数据
+const institutionInfo = reactive({
+  companyName: "",
+  companyAddress: "",
+  fzrName: "",
+  fzrMobile: "",
+  frName: "",
+  frMobile: "",
+  companyCode: "",
+  companyDesc: "",
+  remark: "",
+})
+
+// 关联驿站表格定义
+const manageSitesTabColumns = [
+  {
+    title: '序号',
+    align: "center",
+    key: 'siteID',
+    customRender: item => `${pageParams.pageSize * (pageParams.pageIndex - 1) + item.index + 1}`
+  },
+  {title: '驿站名称', dataIndex: 'siteName', key: 'siteName', align: "center"},
+  {title: '驿站地址', dataIndex: 'detailAddress', key: 'detailAddress', align: "center"},
+];
+const pageParams = reactive({
+  pageIndex: 1,
+  pageSize: 10,
+  institutionID: ''
+});
+// 关联驿站数据
+const manageSiteList = ref<Array<any>>([])
+
+// 获取数据
+function loadData(id: string) {
+  getInstitutionByID(id).then((result: any) => {
+    Object.keys(institutionInfo).forEach((key: string) => {
+      institutionInfo[key] = result[key];
+    })
+    getManageSites(id)
+  });
+}
+
+// 获取关联驿站数据
+function getManageSites(id: string) {
+  pageParams.institutionID = id;
+  getListByInstitutionID(pageParams).then((result: any) => {
+    manageSiteList.value = result.list;
+  });
+}
+
+
+// 页面初始化
+onMounted(() => {
+  const id = history.state.params?.id;
+  loadData(id);
+})
+</script>
+
+<style scoped>
+
+</style>

+ 13 - 6
vue/src/views/baseSettings/institution/index.vue

@@ -48,6 +48,8 @@
         <template #bodyCell="{ column, text, record }">
           <template v-if="column.key === 'operation'">
             <div class="table-operation">
+              <a-button type="link" size="small" functioncode="T01010101" @click='onDetail(record.institutionID)'>查看
+              </a-button>
               <a-button type="link" size="small" functioncode="T01010103" @click='onEdit(record.institutionID)' >编辑</a-button>
               <a-button type="link" size="small" functioncode="T01010104" @click="onDel(record)" >删除</a-button>
             </div>
@@ -59,14 +61,14 @@
 </template>
 
 <script lang="ts">
-import {reactive, ref, computed, defineComponent, createVNode} from 'vue';
+import {computed, createVNode, defineComponent, reactive, ref} from 'vue';
 import {useTabsViewStore} from "@/store/modules/tabsView";
 import {DownOutlined, ExclamationCircleOutlined, UpOutlined} from '@ant-design/icons-vue';
-import type {FormInstance,TableColumnsType, TableProps} from 'ant-design-vue';
-import {getInstitutionList, delInstitution} from '@/api/baseSettings/institution';
+import type {FormInstance, TableColumnsType, TableProps} from 'ant-design-vue';
+import {message, Modal} from "ant-design-vue";
+import {delInstitution, getInstitutionList} from '@/api/baseSettings/institution';
 import BExportExcel from "@/components/basic/excel/exportExcel/exportExcel.vue";
 import {getPaginationTotalTitle} from "@/utils/common";
-import {message, Modal} from "ant-design-vue";
 
 export default defineComponent({
   name: 'InstitutionList',
@@ -98,7 +100,7 @@ export default defineComponent({
       {title: '管理驿站数量', dataIndex: 'siteCount', key: 'siteCount', width:100,align: "center",
         /*customRender:  ({record}) => record.resolveDate == null?"":dayjs(record.resolveDate).format('YYYY-MM-DD')*/
       },
-      {title: '操作', key: 'operation', fixed: 'right',width:100, align: "center"},
+      {title: '操作', key: 'operation', fixed: 'right', width: 150, align: "center"},
     ];
     const pagination = computed(() => ({
       total: formState.total,
@@ -170,6 +172,10 @@ export default defineComponent({
       tabsViewStore.addTabByPath('/baseSettings/institution/edit', {id:id,op:2});
     };
 
+    const onDetail = (id: string) => {
+      tabsViewStore.addTabByPath('/baseSettings/institution/detail', {id: id});
+    };
+
     return {
       formRef,
       searchParams,
@@ -183,7 +189,8 @@ export default defineComponent({
       onAdd,
       onEdit,
       onDel,
-      loadData
+      loadData,
+      onDetail
     };
   },
   created() {

+ 180 - 0
vue/src/views/companyService/company/CompanyTableCom.vue

@@ -0,0 +1,180 @@
+<template>
+  <a-modal
+    :width="1100"
+    v-model:visible="visible"
+    title="已录入企业信息"
+    :confirm-loading="confirmLoading"
+    @ok="handleOk"
+    ok-text="确认"
+    cancel-text="取消"
+    :keyboard="false"
+    :mask-closable="false"
+  >
+    <div class="card-search">
+      <a-form
+        ref="formRef"
+        name="advanced_search"
+        class="ant-advanced-search-form"
+        :model="searchParams"
+      >
+        <a-row :gutter="24">
+          <a-col :span="6">
+            <a-form-item label="企业名称" :label-col="{ span: 8 }" name="name">
+              <a-input v-model:value="searchParams.companyName" style="color: black;" placeholder=""/>
+            </a-form-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-item label="统一信用代码" :label-col="{ span: 8 }" name="name">
+              <a-input v-model:value="searchParams.companyCode" style="color: black;" placeholder=""/>
+            </a-form-item>
+          </a-col>
+          <a-col :span="4" style="text-align: left">
+            <a-button type="primary" html-type="submit" @click="onSearch">查询</a-button>
+            <a-button
+              style="margin: 0 8px"
+              @click="
+              () => {
+                searchParams.pageIndex = 1;
+                searchParams.pageSize = 10;
+                searchParams.companyName = '';
+                searchParams.companyCode = '';
+                loadData();
+              }
+            ">重置
+            </a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <a-table :columns="columns" :data-source="dataList" :scroll="{ x:'100%', y: 500 }" :pagination="pagination"
+             :loading="formState.loading"
+             @change="handleTableChange"
+             bordered>
+      <template #bodyCell="{ column, text, record }">
+        <template v-if="column.key === 'postCount'">
+          <div style="text-align: center;">
+            <a-button name="postCount" type="link" size="small"
+                      @click='onShowPosition(record)'>{{ record.postCount }}
+            </a-button>
+          </div>
+        </template>
+      </template>
+    </a-table>
+  </a-modal>
+
+  <PositionShowModal ref="modalShowRef"></PositionShowModal>
+</template>
+
+<script setup lang="ts">
+import {computed, reactive, ref} from "vue";
+import type {TableColumnsType, TableProps} from "ant-design-vue";
+import {getPaginationTotalTitle} from "@/utils/common";
+import {getList} from "@/api/companyService/company";
+import {get} from "@/api/common";
+import PositionShowModal from "@/views/companyService/company/show.vue";
+
+// 对话框显示隐藏开关
+const visible = ref(false);
+// 加载动画开关
+const confirmLoading = ref(false);
+// 企业数据
+const dataList = ref<Array<any>>();
+// 企业信息表格数据定义
+const columns: TableColumnsType = [
+  {
+    title: '序号',
+    align: "center",
+    key: 'companyID',
+    width: 60,
+    customRender: item => `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`
+  },
+  {title: '企业名称', dataIndex: 'companyName', key: 'companyName', width: 200, align: "center"},
+  {title: '统一信用代码', dataIndex: 'companyCode', key: 'companyCode', width: 200, align: "center"},
+  {
+    title: '企业状态',
+    dataIndex: 'recordStatus',
+    key: 'recordStatus',
+    width: 120,
+    align: "center",
+    customRender: (item) => {
+      return item.record.recordStatus == 1 ? "在营" : "关闭";
+    }
+  },
+  {title: '企业规模', dataIndex: 'companyModelType', key: 'companyModelType', width: 120, align: "center"},
+  {title: '当前岗位数量', dataIndex: 'postCount', key: 'postCount', width: 120, align: "center"},
+];
+const searchParams = reactive({
+  pageIndex: 1,
+  pageSize: 20,
+  companyName: '',
+  companyCode: '',
+  createUserId: "",
+  workTime: ""
+});
+const pagination = computed(() => ({
+  total: formState.total,
+  current: searchParams.pageIndex,
+  pageSize: searchParams.pageSize,
+  showSizeChanger: true,
+  showTotal: total => getPaginationTotalTitle(total)
+}));
+const formState = reactive({
+  total: 0,
+  loading: false
+});
+// 岗位对话框ref
+const modalShowRef = ref();
+
+// 对话框确定事件
+function handleOk() {
+  visible.value = false
+}
+
+// 显示
+function show(record) {
+  visible.value = true;
+  searchParams.createUserId = record.userId;
+  searchParams.workTime = record.workTime;
+  loadData()
+}
+
+// 获取数据
+const loadData = async function () {
+  formState.loading = true;
+  await getList(searchParams).then((result: any) => {
+    dataList.value = result.list;
+    formState.total = result.total;
+  }).finally(() => {
+    formState.loading = false;
+  })
+}
+
+// 表格状态变更事件
+const handleTableChange: TableProps['onChange'] = (pag: { pageSize: number; current: number },) => {
+  searchParams.pageIndex = pag.current;
+  searchParams.pageSize = pag.pageSize;
+  loadData();
+};
+
+// 开启岗位数据对话框
+async function onShowPosition(record) {
+  if (record.postCount == 0) {
+    return;
+  }
+  const curPositionList: any = await get("companyService/post/getPostsByCompanyID", {companyId: record.companyID});
+  modalShowRef.value.show(curPositionList);
+}
+
+// 表单查询事件
+function onSearch() {
+  loadData()
+}
+
+defineExpose({
+  show
+})
+</script>
+
+<style scoped>
+
+</style>

+ 61 - 0
vue/src/views/jobUserManager/jobhunt/detail.vue

@@ -0,0 +1,61 @@
+<template>
+  <div class="card-edit">
+    <a-divider orientation="left">求职意向基本信息</a-divider>
+    <a-descriptions bordered>
+      <a-descriptions-item label="姓名">{{ jobHuntInfo.jobUserName }}</a-descriptions-item>
+      <a-descriptions-item label="人才类型">{{ jobHuntInfo.jobUserTypeStr }}</a-descriptions-item>
+      <a-descriptions-item label="月薪要求">{{ jobHuntInfo.minSalary }} 至 {{ jobHuntInfo.maxSalary }}
+      </a-descriptions-item>
+      <a-descriptions-item label="工作年限">{{ jobHuntInfo.workYear }}</a-descriptions-item>
+      <a-descriptions-item label="求职类型">{{ jobHuntInfo.jobHuntTypeStr }}</a-descriptions-item>
+      <a-descriptions-item label="求职岗位">{{ jobHuntInfo.professionName }}</a-descriptions-item>
+      <a-descriptions-item label="希望工作地区">{{ jobHuntInfo.areaWork }}</a-descriptions-item>
+      <a-descriptions-item label="可到职日期">
+        {{ jobHuntInfo.inDate ? dayjs(jobHuntInfo.inDate).format('YYYY-MM-DD') : '' }}
+      </a-descriptions-item>
+    </a-descriptions>
+    <a-divider orientation="left">其他信息</a-divider>
+    <a-descriptions bordered>
+      <a-descriptions-item :span="3" label="备注">{{ jobHuntInfo.otherDemand }}</a-descriptions-item>
+    </a-descriptions>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {onMounted, reactive} from "vue";
+import {getJobHuntByID} from "@/api/jobUserManager/jobhunt";
+import dayjs from "dayjs";
+
+// 求职意向数据
+const jobHuntInfo = reactive({
+  jobUserName: "",
+  jobUserTypeStr: "",
+  minSalary: "",
+  maxSalary: "",
+  workYear: "",
+  jobHuntTypeStr: "",
+  professionName: "",
+  areaWork: "",
+  inDate: "",
+  otherDemand: "",
+})
+
+// 获取求职意向数据
+function loadData(id: string) {
+  getJobHuntByID(id).then((result: any) => {
+    Object.keys(jobHuntInfo).forEach(key => {
+      jobHuntInfo[key] = result[key];
+    })
+  });
+}
+
+// 页面初始化
+onMounted(() => {
+  const id = history.state.params?.id;
+  loadData(id);
+})
+</script>
+
+<style scoped>
+
+</style>

+ 12 - 5
vue/src/views/jobUserManager/jobhunt/index.vue

@@ -125,6 +125,8 @@
           </template>
           <template v-if="column.key === 'operation'">
             <div class="table-operation">
+              <a-button type="link" size="small" functioncode="T01030201" @click="onDetail(record.jobHuntID)">查看
+              </a-button>
               <a-button type="link" size="small" functioncode="T01030203" @click='onEdit(record.jobHuntID)'>编辑
               </a-button>
               <a-button type="link" size="small" functioncode="T01030204" @click="onDel(record)">删除</a-button>
@@ -140,15 +142,15 @@
 </template>
 
 <script lang="ts">
-import {reactive, ref, computed, defineComponent, createVNode} from 'vue';
-import type {FormInstance, TableColumnsType, TableProps, SelectProps} from 'ant-design-vue';
-import {getJobHuntList, delJobHunt} from '@/api/jobUserManager/jobhunt';
+import {computed, createVNode, defineComponent, reactive, ref} from 'vue';
+import type {FormInstance, SelectProps, TableColumnsType, TableProps} from 'ant-design-vue';
+import {message, Modal} from "ant-design-vue";
+import {delJobHunt, getJobHuntList} from '@/api/jobUserManager/jobhunt';
 import {getSysDictionaryList} from '@/api/system/dictionary';
 import {getPaginationTotalTitle} from '@/utils/common';
 import dayjs from 'dayjs';
 import BImportExcel from "@/components/basic/excel/importExcel/importExcel.vue";
 import BExportExcel from "@/components/basic/excel/exportExcel/exportExcel.vue";
-import {message, Modal} from "ant-design-vue";
 import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
 import type {ImportProps} from "@/components/basic/excel/importExcel/ImportProps";
 import {useTabsViewStore} from "@/store/modules/tabsView";
@@ -208,7 +210,7 @@ export default defineComponent({
         }
       },
       {title: '推荐数量', key: 'recommendNum', align: "center"},
-      {title: '操作', key: 'operation', fixed: 'right', width: 170, align: "center"},
+      {title: '操作', key: 'operation', fixed: 'right', width: 220, align: "center"},
     ];
     const pagination = computed(() => ({
       total: formState.total,
@@ -323,6 +325,10 @@ export default defineComponent({
       tabsViewStore.addTabByPath('/jobusermgr/jobhunt/edit', {id: id});
     };
 
+    const onDetail = (id: string) => {
+      tabsViewStore.addTabByPath('/jobusermgr/jobhunt/detail', {id: id});
+    };
+
     const onRecommendCompanyPost = (item) => {
       recommendRef.value.show(item.professionID, item.professionName, item.jobHuntID, item.jobUserName, 0,
         item.parentProfessionID, item.cultureRank, item.workYear, item.minSalary, item.maxSalary,
@@ -379,6 +385,7 @@ export default defineComponent({
       getJobHuntTypeList,
       getJobUserTypeList,
       getIsAccomplishList,
+      onDetail
     };
   },
   created() {

+ 168 - 0
vue/src/views/jobUserManager/jobuser/JobUserTableCom.vue

@@ -0,0 +1,168 @@
+<template>
+  <a-modal
+    :width="1100"
+    v-model:visible="visible"
+    title="已录入企业信息"
+    :confirm-loading="confirmLoading"
+    @ok="handleOk"
+    ok-text="确认"
+    cancel-text="取消"
+    :keyboard="false"
+    :mask-closable="false"
+  >
+    <div class="card-search">
+      <a-form
+        ref="formRef"
+        name="advanced_search"
+        class="ant-advanced-search-form"
+        :model="searchParams"
+      >
+        <a-row :gutter="24">
+          <a-col :span="6">
+            <a-form-item label="姓名" :label-col="{ span: 8 }" name="name">
+              <a-input v-model:value="searchParams.name" style="color: black;" placeholder=""/>
+            </a-form-item>
+          </a-col>
+          <a-col :span="4" style="text-align: left">
+            <a-button type="primary" html-type="submit" @click="onSearch">查询</a-button>
+            <a-button
+              style="margin: 0 8px"
+              @click="
+              () => {
+                searchParams.pageIndex = 1;
+                searchParams.pageSize = 10;
+                searchParams.name = '';
+                loadData();
+              }
+            ">重置
+            </a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <a-table :columns="columns" :data-source="dataList" :scroll="{ x:'100%', y: 500 }" :pagination="pagination"
+             :loading="formState.loading"
+             @change="handleTableChange"
+             bordered>
+    </a-table>
+  </a-modal>
+</template>
+
+<script setup lang="ts">
+import {computed, reactive, ref} from "vue";
+import type {TableColumnsType, TableProps} from "ant-design-vue";
+import {getPaginationTotalTitle} from "@/utils/common";
+import {getList} from "@/api/jobUserManager/jobuser";
+
+// 对话框显示隐藏开关
+const visible = ref(false);
+// 加载动画开关
+const confirmLoading = ref(false);
+// 企业数据
+const dataList = ref<Array<any>>();
+// 企业信息表格数据定义
+const columns: TableColumnsType = [
+  {
+    title: '序号',
+    align: 'center',
+    width: 80,
+    key: 'jobUserID',
+    customRender: (item) =>
+      `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`,
+  },
+  {title: '姓名', dataIndex: 'name', key: 'name', width: 100, align: "center"},
+  {title: '公民身份号码', dataIndex: 'identityNumber', key: 'identityNumber', width: 170, align: "center"},
+  {title: '性别', dataIndex: 'genderName', key: 'genderName', width: 80, align: "center"},
+  {title: '联系电话', dataIndex: 'userMobile', key: 'userMobile', align: "center"},
+  {
+    title: '年龄', dataIndex: 'age', key: 'age', align: "center", customRender: item => {
+      return calculateAge(item.record.identityNumber);
+    }
+  },
+  {title: '文化程度', dataIndex: 'cultureName', key: 'cultureName', align: "center"},
+  {title: '重点人员类别', dataIndex: 'keyTypeName', key: 'keyTypeName', align: "center"},
+];
+const searchParams = reactive({
+  pageIndex: 1,
+  pageSize: 20,
+  name: '',
+  createUserId: "",
+  workTime: ""
+});
+const pagination = computed(() => ({
+  total: formState.total,
+  current: searchParams.pageIndex,
+  pageSize: searchParams.pageSize,
+  showSizeChanger: true,
+  showTotal: total => getPaginationTotalTitle(total)
+}));
+const formState = reactive({
+  total: 0,
+  loading: false
+});
+
+
+// 对话框确定事件
+function handleOk() {
+  visible.value = false
+}
+
+// 显示
+function show(record: any) {
+  console.log(record)
+  visible.value = true;
+  searchParams.createUserId = record.userId;
+  searchParams.workTime = record.workTime;
+  loadData()
+}
+
+// 获取数据
+async function loadData() {
+  formState.loading = true;
+  await getList(searchParams).then((result: any) => {
+    dataList.value = result.list;
+    formState.total = result.total;
+  }).finally(() => {
+    formState.loading = false;
+  })
+}
+
+// 表格状态变更事件
+const handleTableChange: TableProps['onChange'] = (pag: { pageSize: number; current: number },) => {
+  searchParams.pageIndex = pag.current;
+  searchParams.pageSize = pag.pageSize;
+  loadData();
+};
+
+// 计算年龄
+function calculateAge(idCardNumber: string) {
+  // 假设身份证号中出生日期的格式为YYYY-MM-DD
+  const birthYear = parseInt(idCardNumber.substring(6, 10), 10);
+  const birthMonth = parseInt(idCardNumber.substring(10, 12), 10);
+  const birthDay = parseInt(idCardNumber.substring(12, 14), 10);
+  // 获取当前日期
+  const currentDate = new Date();
+  const currentYear = currentDate.getFullYear();
+  const currentMonth = currentDate.getMonth() + 1; // 月份从 0 开始
+  const currentDay = currentDate.getDate();
+  // 计算年龄
+  let age = currentYear - birthYear;
+  if (currentMonth < birthMonth || (currentMonth === birthMonth && currentDay < birthDay)) {
+    age--; // 生日还未过,减去一岁
+  }
+  return age;
+}
+
+// 表单查询事件
+function onSearch() {
+  loadData()
+}
+
+defineExpose({
+  show
+})
+</script>
+
+<style scoped>
+
+</style>

+ 19 - 4
vue/src/views/jobUserManager/jobuser/edit.vue

@@ -103,7 +103,14 @@
       <a-row :gutter="24">
         <a-col :span="8">
           <a-form-item label="民族" :label-col="{ span: 6 }"  name="nation">
-            <a-input v-model:value="dataModel.nation" placeholder=""/>
+            <!--            <a-input v-model:value="dataModel.nation" placeholder=""/>-->
+            <a-select
+              ref="select"
+              v-model:value="dataModel.nation"
+              :options="nationList"
+              :field-names="{ label: 'name', value: 'value' }"
+              :allow-clear="true"
+            ></a-select>
           </a-form-item>
         </a-col>
         <a-col :span="8">
@@ -440,12 +447,12 @@
 <script lang="ts">
 import {defineComponent, reactive, ref, toRefs} from 'vue';
 import type {SelectProps, TableColumnsType} from 'ant-design-vue';
+import {message} from "ant-design-vue";
 import {useTabsViewStore} from '@/store/modules/tabsView';
 import BUploadFile from '@/components/file/uploadFile.vue';
 import {get} from "@/api/common";
-import { getSysDictionaryList } from '@/api/system/dictionary';
-import {save, getEducationList, getDataById, getExperienceList} from '@/api/jobUserManager/jobuser';
-import {message} from "ant-design-vue";
+import {getSysDictionaryList} from '@/api/system/dictionary';
+import {getDataById, getEducationList, getExperienceList, save} from '@/api/jobUserManager/jobuser';
 import {getSiteList} from "@/api/baseSettings/siteInfo";
 
 interface FormState {
@@ -477,6 +484,7 @@ export default defineComponent(
       const regionList = ref<SelectProps['options']>();
       const streetList = ref<SelectProps['options']>();
       const familyNatureList = ref<SelectProps['options']>();
+      const nationList = ref<SelectProps['options']>();
 
       const educationData = ref([]);
       const educationColumns: TableColumnsType = [
@@ -581,6 +589,11 @@ export default defineComponent(
           jobStatusList.value = data;
         });
       };
+      const getNationList = () => {
+        getSysDictionaryList('NationType').then((data) => {
+          nationList.value = data;
+        });
+      };
       const getBloodTypeList = () => {
         getSysDictionaryList('BloodType').then((data) => {
           bloodTypeList.value = data;
@@ -729,6 +742,7 @@ export default defineComponent(
         getGenderList();
         getCultureList();
         getJobStatusList();
+        getNationList();
         getBloodTypeList();
         getFamilyNatureList();
         getKeyPersonTypeList();
@@ -777,6 +791,7 @@ export default defineComponent(
         addExperience,
         experienceColumns,
         educationColumns,
+        nationList
       }
     },
     created() {

+ 51 - 2
vue/src/views/taskAndLog/dowork/index.vue

@@ -79,6 +79,22 @@
                bordered
                @change="handleTableChange">
         <template #bodyCell="{ column, text, record }">
+          <template v-if="column.key === 'RecordsCompanyNum'">
+            <div class="table-operation">
+              <a-button type="link" size="small" @click='onRecordsCompanyInfo(record)'>{{
+                  record.RecordsCompanyNum
+                }}
+              </a-button>
+            </div>
+          </template>
+          <template v-if="column.key === 'RecordsJobuserNum'">
+            <div class="table-operation">
+              <a-button type="link" size="small" @click='onRecordsJobUserInfo(record)'>{{
+                  record.RecordsJobuserNum
+                }}
+              </a-button>
+            </div>
+          </template>
           <template v-if="column.key === 'operation'">
             <div class="table-operation">
               <a-button functioncode="T01040201" size="small" type="link" @click='onDetail(record.doWorkID)'>查看
@@ -90,6 +106,11 @@
           </template>
         </template>
       </a-table>
+
+      <!-- 企业数据表格对话框 -->
+      <CompanyTableCom ref="companyTableComRef"></CompanyTableCom>
+      <!-- 求职人员数据表格对话框 -->
+      <JobUserTableCom ref="jobUserTableComRef"></JobUserTableCom>
     </div>
   </div>
 </template>
@@ -106,10 +127,12 @@ import {getSysDictionaryList} from "@/api/system/dictionary";
 import BExportExcel from "@/components/basic/excel/exportExcel/exportExcel.vue";
 import {getPaginationTotalTitle} from "@/utils/common";
 import dayjs from 'dayjs';
+import CompanyTableCom from "@/views/companyService/company/CompanyTableCom.vue";
+import JobUserTableCom from "@/views/jobUserManager/jobuser/JobUserTableCom.vue";
 
 export default defineComponent({
   name: 'doTaskList',
-  components: {DownOutlined, UpOutlined, BExportExcel},
+  components: {JobUserTableCom, CompanyTableCom, DownOutlined, UpOutlined, BExportExcel},
   setup() {
     const formRef = ref<FormInstance>();
     const tabsViewStore = useTabsViewStore();
@@ -164,6 +187,10 @@ export default defineComponent({
     const streetList = ref<SelectProps['options']>();
     const logTypeList = ref<SelectProps['options']>();
     const dataList = ref([]);
+    // 企业数据表格对话框
+    const companyTableComRef = ref();
+    // 就业人员表格对话框
+    const jobUserTableComRef = ref();
 
     const getLogTypeList = async function () {
       const logTypeResult: any = await getSysDictionaryList("LogType");
@@ -267,6 +294,24 @@ export default defineComponent({
       loadData();
     };
 
+    // 开启录入企业信息弹窗
+    function onRecordsCompanyInfo(record: any) {
+      if (record.RecordsCompanyNum == 0) {
+        return;
+      }
+      console.log(companyTableComRef)
+      companyTableComRef.value.show(record)
+    }
+
+    // 开启录入求职人员信息弹窗
+    function onRecordsJobUserInfo(record: any) {
+      if (record.RecordsJobuserNum == 0) {
+        return;
+      }
+      console.log(jobUserTableComRef)
+      jobUserTableComRef.value.show(record)
+    }
+
     return {
       formRef,
       expand,
@@ -290,7 +335,11 @@ export default defineComponent({
       loadData,
       changeRegion,
       dayjs,
-      onDetail
+      onDetail,
+      onRecordsCompanyInfo,
+      onRecordsJobUserInfo,
+      companyTableComRef,
+      jobUserTableComRef,
     };
   },
   created() {