Pārlūkot izejas kodu

app-我的信息、岗位推荐;岗位表和意向表外键关联处理

liao-sea 1 gadu atpakaļ
vecāks
revīzija
aeb29098fc
41 mainītis faili ar 1288 papildinājumiem un 548 dzēšanām
  1. 13 27
      h5app/src/api/account/model.d.ts
  2. 26 0
      h5app/src/api/jobUserInfo/index.ts
  3. 53 0
      h5app/src/api/post/index.ts
  4. 8 0
      h5app/src/router/index.ts
  5. 1 2
      h5app/src/views/login.vue
  6. 193 198
      h5app/src/views/pages/jobuser/edit.vue
  7. 14 8
      h5app/src/views/pages/jobuser/educationEdit.vue
  8. 40 9
      h5app/src/views/pages/jobuser/jobHuntEdit.vue
  9. 6 3
      h5app/src/views/pages/jobuser/list.vue
  10. 398 0
      h5app/src/views/pages/post/detail.vue
  11. 36 131
      h5app/src/views/pages/post/recommend.vue
  12. 10 38
      h5app/src/views/pages/user/myInfo.vue
  13. 149 0
      h5app/src/views/pages/work/task/myTask.vue
  14. 8 7
      h5app/src/views/sapp/tabMain.vue
  15. 0 12
      h5app/src/views/sapp/tabUser.vue
  16. 26 3
      src/main/java/com/hz/employmentsite/controller/companyService/PostController.java
  17. 7 0
      src/main/java/com/hz/employmentsite/controller/jobUserManager/JobUserController.java
  18. 1 1
      src/main/java/com/hz/employmentsite/controller/taskAndLog/DoTaskController.java
  19. 2 2
      src/main/java/com/hz/employmentsite/mapper/cquery/JobuserCQuery.java
  20. 4 0
      src/main/java/com/hz/employmentsite/mapper/cquery/PostCQuery.java
  21. 0 1
      src/main/java/com/hz/employmentsite/mapper/cquery/RecommendCQuery.java
  22. 10 0
      src/main/java/com/hz/employmentsite/model/PcJobhunt.java
  23. 70 0
      src/main/java/com/hz/employmentsite/model/PcJobhuntExample.java
  24. 55 3
      src/main/java/com/hz/employmentsite/services/impl/companyService/PostServiceImpl.java
  25. 2 0
      src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobHuntServiceImpl.java
  26. 32 4
      src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobUserServiceImpl.java
  27. 4 2
      src/main/java/com/hz/employmentsite/services/service/companyService/PostService.java
  28. 3 0
      src/main/java/com/hz/employmentsite/services/service/jobUserManager/JobUserService.java
  29. 4 0
      src/main/java/com/hz/employmentsite/vo/companyService/PostVo.java
  30. 19 0
      src/main/java/com/hz/employmentsite/vo/companyService/RecommendPostVo.java
  31. 2 0
      src/main/java/com/hz/employmentsite/vo/jobUserManager/JobHuntVo.java
  32. 2 3
      src/main/java/com/hz/employmentsite/vo/jobUserManager/JobUserVo.java
  33. 10 46
      src/main/java/com/hz/employmentsite/vo/user/UserInfoModel.java
  34. 28 13
      src/main/resources/mapping/PcJobhuntMapper.xml
  35. 2 1
      src/main/resources/mapping/cquery/JobhuntCQuery.xml
  36. 9 19
      src/main/resources/mapping/cquery/JobuserCQuery.xml
  37. 10 2
      src/main/resources/mapping/cquery/PostCQuery.xml
  38. 8 5
      src/main/resources/mapping/cquery/SysUserCQuery.xml
  39. 1 1
      vue/src/api/companyService/post.ts
  40. 21 7
      vue/src/views/jobUserManager/jobhunt/edit.vue
  41. 1 0
      vue/src/views/jobUserManager/jobhunt/index.vue

+ 13 - 27
h5app/src/api/account/model.d.ts

@@ -23,33 +23,19 @@ declare namespace API {
   };
 
   type AdminUserInfo = {
-    IDNo: string
-    birthday: string
-    collegeID: string
-    collegeName: string
-    createBy: string
-    createTime: string
-    genderID: string
-    genderName: string
-    idno: string
-    key: string
-    loginId: string
-    majorClassID: string
-    majorClassName: string
-    majorGradeID: string
-    majorGradeName: string
-    name: "钟薇溥"
-    recordStatus: null
-    studentID: "2d08a9aa-b346-11ed-be3c-7085c2a9999e"
-    studentTypeID: null
-    studentTypeName: null
-    teacherID: null
-    titleName: null
-    updateBy: null
+    userID:string,
+    userTypeID: 1,
+    userTypeName: string,
+    loginID: string,
+    name:string,
+    siteUserName:string,
+    gender: 1,
+    genderName: string,
+    userMobile: string,
+    recordStatus: 1,
+    createBy: string,
+    createTime: string,
+    updateBy: null,
     updateTime: null
-    userCode: "20210900205"
-    userId: "2d08a9aa-b346-11ed-be3c-7085c2a9999e"
-    userName: "钟薇溥"
-    userTypeId: "2"
   };
 }

+ 26 - 0
h5app/src/api/jobUserInfo/index.ts

@@ -88,3 +88,29 @@ export function getExperienceList(id: any) {
         },
     );
 }
+
+export function getUserHuntList(jobUserID: any) {
+    return request(
+        {
+            url: "jobUserService/jobUser/getUserHuntList",
+            method: 'get',
+            params: {jobUserID:jobUserID},
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+export function getHuntPostList(data: any) {
+    return request(
+        {
+            url: "jobUserService/jobUser/getHuntPostList",
+            method: 'get',
+            data: data,
+        },
+        {
+            isNew: true,
+        },
+    );
+}

+ 53 - 0
h5app/src/api/post/index.ts

@@ -0,0 +1,53 @@
+import {request} from '@/utils/request';
+
+export function getPostList() {
+    return request<any>(
+        {
+            url: 'companyService/post/getList',
+            method: 'get',
+            params: {pageIndex:1,pageSize:10000},
+        },
+        { isNew: true },
+    );
+}
+
+export function getCommendPostList(params:any) {
+    return request<object>(
+        {
+            url: 'companyService/post/getCommendPostList',
+            method: 'get',
+            params: params,
+        },
+        { isNew: true },
+    );
+}
+
+export function saveCommendPost(data:any) {
+    return request<object>(
+        {
+            url: 'companyService/post/saveCommendPost',
+            method: 'post',
+            data: data,
+        },
+        {
+            isNew: true,
+            successMsg: '推荐成功!',
+            errorMsg: '推荐失败!'
+        },
+    );
+}
+
+export function saveCommendPostList(data:any) {
+    return request<object>(
+        {
+            url: 'companyService/post/saveCommendPostList',
+            method: 'post',
+            data: data,
+        },
+        {
+            isNew: true,
+            successMsg: '推荐成功!',
+            errorMsg: '推荐失败!'
+        },
+    );
+}

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

@@ -60,6 +60,10 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/post/recommend',
                 component: () => import('@/views/pages/post/recommend.vue')
             },
+            {
+                path: 'tabMain/post/detail',
+                component: () => import('@/views/pages/post/detail.vue')
+            },
             {
                 path: 'tabMain/work/log/list',
                 component: () => import('@/views/pages/work/log/list.vue')
@@ -76,6 +80,10 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/work/task/edit',
                 component: () => import('@/views/pages/work/task/edit.vue')
             },
+            {
+                path: 'tabMain/work/task/myTask',
+                component: () => import('@/views/pages/work/task/myTask.vue')
+            },
             {
                 path: 'tabMain/sitemap/index',
                 component: () => import('@/views/pages/sitemap/index.vue')

+ 1 - 2
h5app/src/views/login.vue

@@ -33,8 +33,7 @@
         <ion-loading
             :is-open="state.loading"
             message="登陆中..."
-            @didDismiss="setOpen(false)"
-        >
+            @didDismiss="setOpen(false)" >
         </ion-loading>
       </div>
     </ion-content>

+ 193 - 198
h5app/src/views/pages/jobuser/edit.vue

@@ -19,205 +19,200 @@
       </div>
     </div>
     <ion-content>
-        <div  v-if="curStepData.statusVal==1">
-          <ion-item-group>
-            <ion-item>
-              <div class="panel-title2">
-                <div class="item-flag"></div>
-                基本信息
-              </div>
-            </ion-item>
-            <ion-item mode="md" :class="[baseDataValid.baseData.name.$error?'ion-invalid':'ion-valid']">
-              <ion-label>姓名<span class="danger">*</span></ion-label>
-              <ion-input name="name" id="name" style="text-align: right;"  placeholder="请输入姓名" v-model="baseData.name" ></ion-input>
-              <ion-note slot="error">姓名不能为空</ion-note>
-            </ion-item>
-            <ion-item mode="md" :class="[baseDataValid.baseData.identityNumber.$error?'ion-invalid':'ion-valid']">
-              <ion-label>公民身份号码<span class="danger">*</span></ion-label>
-              <ion-input name="identityNumber" id="identityNumber" style="text-align: right;"  placeholder="请输入身份证号码" v-model="baseData.identityNumber" ></ion-input>
-              <ion-note slot="error">公民身份号码不能为空</ion-note>
-            </ion-item>
-            <ion-item mode="md" :class="[baseDataValid.baseData.sex.$error?'ion-invalid':'ion-valid']">
-              <ion-label>性别<span class="danger">*</span></ion-label>
-              <ion-select name="sex" id="sex" okText="确定" cancelText="取消"
-                          interface="action-sheet"   v-model="baseData.sex" placeholder="请选择性别" >
-                <ion-select-option v-for=" (it,key) in genderList" :key="key"  :value="it.value">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-              <ion-note slot="error">性别不能为空</ion-note>
-            </ion-item>
-            <ion-item mode="md" :class="[baseDataValid.baseData.jobStatusID.$error?'ion-invalid':'ion-valid']">
-              <ion-label>就业状态<span class="danger">*</span></ion-label>
-              <ion-select name="jobStatusID"  id="jobStatusID" okText="确定" cancelText="取消" v-model="baseData.jobStatusID"
-                          interface="action-sheet" placeholder="请选择就业状态" >
-                <ion-select-option v-for=" (it,key) in jobUserStatusList" :key="key" :value="it.value">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-              <ion-note slot="error">就业状态不能为空</ion-note>
-            </ion-item>
-            <ion-item mode="md" :class="[baseDataValid.baseData.keyPersonTypeID.$error?'ion-invalid':'ion-valid']">
-              <ion-label>重点人员类别<span class="danger">*</span></ion-label>
-              <ion-select name="keyPersonTypeID"  id="keyPersonTypeID" okText="确定" cancelText="取消" v-model="baseData.keyPersonTypeID"
-                          interface="action-sheet" placeholder="请选择重点人员类别" >
-                <ion-select-option v-for=" (it,key) in keyPersonTypeList" :key="key" :value="it.value">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-              <ion-note slot="error">重点人员类别不能为空</ion-note>
-            </ion-item>
-            <ion-item mode="md" :class="[baseDataValid.baseData.userMobile.$error?'ion-invalid':'ion-valid']">
-              <ion-label>联系电话<span class="danger">*</span></ion-label>
-              <ion-input name="userMobile" id="userMobile"  style="text-align: right;" placeholder="请输入联系电话" v-model="baseData.userMobile" ></ion-input>
-              <ion-note slot="error">联系电话不能为空</ion-note>
-            </ion-item>
-            <ion-item mode="md" :class="[baseDataValid.baseData.address.$error?'ion-invalid':'ion-valid']">
-              <ion-label>地址<span class="danger">*</span></ion-label>
-              <ion-input name="address" id="address"  style="text-align: right;"  placeholder="请输入地址" v-model="baseData.address" ></ion-input>
-              <ion-note slot="error">地址不能为空</ion-note>
-            </ion-item>
-            <ion-item mode="md" :class="[baseDataValid.baseData.siteID.$error?'ion-invalid':'ion-valid']"  >
-              <ion-label>所属驿站<span class="danger">*</span></ion-label>
-              <ion-select name="siteID"  id="siteID" okText="确定" cancelText="取消" v-model="baseData.siteID"
-                          interface="action-sheet" placeholder="请选择所属驿站" >
-                <ion-select-option v-for=" (it,key) in siteInfoList" :key="key" :value="it.value">
-                  {{ it.text }}
-                </ion-select-option>
-              </ion-select>
-              <ion-note slot="error">所属驿站不能为空</ion-note>
-            </ion-item>
-          </ion-item-group>
+      <ion-list  v-if="curStepData.statusVal==1">
+        <ion-item>
+          <div class="panel-title2">
+            <div class="item-flag"></div>
+            基本信息
+          </div>
+        </ion-item>
+        <ion-item mode="md" :class="[baseDataValid.baseData.name.$error?'ion-invalid':'ion-valid']">
+          <ion-label>姓名<span class="danger">*</span></ion-label>
+          <ion-input name="name" id="name" style="text-align: right;"  placeholder="请输入姓名" v-model="baseData.name" ></ion-input>
+          <ion-note slot="error">姓名不能为空</ion-note>
+        </ion-item>
+        <ion-item mode="md" :class="[baseDataValid.baseData.identityNumber.$error?'ion-invalid':'ion-valid']">
+          <ion-label>公民身份号码<span class="danger">*</span></ion-label>
+          <ion-input name="identityNumber" id="identityNumber" style="text-align: right;"  placeholder="请输入身份证号码" v-model="baseData.identityNumber" ></ion-input>
+          <ion-note slot="error">公民身份号码不能为空</ion-note>
+        </ion-item>
+        <ion-item mode="md" :class="[baseDataValid.baseData.sex.$error?'ion-invalid':'ion-valid']">
+          <ion-label>性别<span class="danger">*</span></ion-label>
+          <ion-select name="sex" id="sex" okText="确定" cancelText="取消"
+                      interface="action-sheet"   v-model="baseData.sex" placeholder="请选择性别" >
+            <ion-select-option v-for=" (it,key) in genderList" :key="key"  :value="it.value">
+              {{ it.name }}
+            </ion-select-option>
+          </ion-select>
+          <ion-note slot="error">性别不能为空</ion-note>
+        </ion-item>
+        <ion-item mode="md" :class="[baseDataValid.baseData.jobStatusID.$error?'ion-invalid':'ion-valid']">
+          <ion-label>就业状态<span class="danger">*</span></ion-label>
+          <ion-select name="jobStatusID"  id="jobStatusID" okText="确定" cancelText="取消" v-model="baseData.jobStatusID"
+                      interface="action-sheet" placeholder="请选择就业状态" >
+            <ion-select-option v-for=" (it,key) in jobUserStatusList" :key="key" :value="it.value">
+              {{ it.name }}
+            </ion-select-option>
+          </ion-select>
+          <ion-note slot="error">就业状态不能为空</ion-note>
+        </ion-item>
+        <ion-item mode="md" :class="[baseDataValid.baseData.keyPersonTypeID.$error?'ion-invalid':'ion-valid']">
+          <ion-label>重点人员类别<span class="danger">*</span></ion-label>
+          <ion-select name="keyPersonTypeID"  id="keyPersonTypeID" okText="确定" cancelText="取消" v-model="baseData.keyPersonTypeID"
+                      interface="action-sheet" placeholder="请选择重点人员类别" >
+            <ion-select-option v-for=" (it,key) in keyPersonTypeList" :key="key" :value="it.value">
+              {{ it.name }}
+            </ion-select-option>
+          </ion-select>
+          <ion-note slot="error">重点人员类别不能为空</ion-note>
+        </ion-item>
+        <ion-item mode="md" :class="[baseDataValid.baseData.userMobile.$error?'ion-invalid':'ion-valid']">
+          <ion-label>联系电话<span class="danger">*</span></ion-label>
+          <ion-input name="userMobile" id="userMobile"  style="text-align: right;" placeholder="请输入联系电话" v-model="baseData.userMobile" ></ion-input>
+          <ion-note slot="error">联系电话不能为空</ion-note>
+        </ion-item>
+        <ion-item mode="md" :class="[baseDataValid.baseData.address.$error?'ion-invalid':'ion-valid']">
+          <ion-label>地址<span class="danger">*</span></ion-label>
+          <ion-input name="address" id="address"  style="text-align: right;"  placeholder="请输入地址" v-model="baseData.address" ></ion-input>
+          <ion-note slot="error">地址不能为空</ion-note>
+        </ion-item>
+        <ion-item mode="md" :class="[baseDataValid.baseData.siteID.$error?'ion-invalid':'ion-valid']"  >
+          <ion-label>所属驿站<span class="danger">*</span></ion-label>
+          <ion-select name="siteID"  id="siteID" okText="确定" cancelText="取消" v-model="baseData.siteID"
+                      interface="action-sheet" placeholder="请选择所属驿站" >
+            <ion-select-option v-for=" (it,key) in siteInfoList" :key="key" :value="it.value">
+              {{ it.text }}
+            </ion-select-option>
+          </ion-select>
+          <ion-note slot="error">所属驿站不能为空</ion-note>
+        </ion-item>
+        <ion-item>
+          <div class="panel-title2">
+            <div class="item-flag"></div>
+            其他信息
+          </div>
+          <ion-avatar aria-hidden="true" slot="end" style="padding-top: 10px;" >
+            <img alt="" src="@/assets/icon/arrow-up-bold.png"   class="iconBtn"  @click="expandChange" v-if="!expand"/>
+            <img alt="" src="@/assets/icon/arrow-down-bold.png" class="iconBtn"  @click="expandChange" v-if="expand"/>
+          </ion-avatar>
+        </ion-item>
+        <ion-item-group v-if="expand">
           <ion-item>
-            <div class="panel-title2">
-              <div class="item-flag"></div>
-              其他信息
-            </div>
-            <ion-avatar aria-hidden="true" slot="end" style="padding-top: 10px;" >
-              <img alt="" src="@/assets/icon/arrow-up-bold.png"   class="iconBtn"  @click="expandChange" v-if="!expand"/>
-              <img alt="" src="@/assets/icon/arrow-down-bold.png" class="iconBtn"  @click="expandChange" v-if="expand"/>
-            </ion-avatar>
+            <ion-label>文化程度</ion-label>
+            <ion-select name="cultureRank"  id="cultureRank" okText="确定" cancelText="取消" v-model="baseData.cultureRank"
+                        interface="action-sheet" placeholder="请选择文化程度" >
+              <ion-select-option v-for=" (it,key) in cultureRankList" :key="key" :value="it.value">
+                {{ it.name }}
+              </ion-select-option>
+            </ion-select>
           </ion-item>
-          <ion-item-group v-if="expand">
-            <ion-item>
-              <ion-label>文化程度</ion-label>
-              <ion-select name="cultureRank"  id="cultureRank" okText="确定" cancelText="取消" v-model="baseData.cultureRank"
-                          interface="action-sheet" placeholder="请选择文化程度" >
-                <ion-select-option v-for=" (it,key) in cultureRankList" :key="key" :value="it.value">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-            </ion-item>
-            <ion-item>
-              <ion-label>健康状况</ion-label>
-              <ion-select name="healthID"  id="healthID" okText="确定" cancelText="取消" v-model="baseData.healthID"
-                          interface="action-sheet" placeholder="请选择健康状况" >
-                <ion-select-option v-for=" (it,key) in userHealthList" :key="key" :value="it.value">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-            </ion-item>
-            <ion-item>
-              <ion-label>血型</ion-label>
-              <ion-select name="bloodTypeID"  id="bloodTypeID" okText="确定" cancelText="取消" v-model="baseData.bloodTypeID"
-                          interface="action-sheet" placeholder="请选择血型" >
-                <ion-select-option v-for=" (it,key) in bloodTypeList" :key="key" :value="it.value">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-            </ion-item>
-            <ion-item>
-              <ion-label>身高</ion-label>
-              <ion-input name="height" id="height"  style="text-align: right;"  placeholder="请输入身高" v-model="baseData.height" ></ion-input>
-            </ion-item>
-            <ion-item>
-              <ion-label>视力</ion-label>
-              <ion-input name="vision" id="vision"  style="text-align: right;"  placeholder="请输入视力" v-model="baseData.vision" ></ion-input>
-            </ion-item>
-            <ion-item>
-              <ion-label>体重</ion-label>
-              <ion-input name="weight" id="weight"  style="text-align: right;"  placeholder="请输入体重" v-model="baseData.weight" ></ion-input>
-            </ion-item>
-            <ion-item>
-              <ion-label>婚姻状况</ion-label>
-              <ion-select name="maritalStatusID"  id="maritalStatusID" okText="确定" cancelText="取消" v-model="baseData.maritalStatusID"
-                          interface="action-sheet" placeholder="请选择婚姻状况" >
-                <ion-select-option v-for=" (it,key) in maritalStatusList" :key="key" :value="it.value">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-            </ion-item>
-            <ion-item>
-              <ion-label>省份</ion-label>
-              <ion-select name="provinceCode"  id="provinceCode" okText="确定" cancelText="取消" v-model="baseData.provinceCode"
-                          interface="action-sheet" placeholder="请选择省份" @change="provinceChange()" >
-                <ion-select-option v-for=" (it,key) in provinceList" :key="key" :value="it.code">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-            </ion-item>
-            <ion-item>
-              <ion-label>市/县</ion-label>
-              <ion-select name="regionCode"  id="regionCode" okText="确定" cancelText="取消" v-model="baseData.regionCode"
-                          interface="action-sheet" placeholder="请选择市/县"  @ionChange="regionChange()" >
-                <ion-select-option v-for=" (it,key) in regionList" :key="key" :value="it.code">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-            </ion-item>
-            <ion-item>
-              <ion-label>镇/街</ion-label>
-              <ion-select name="streetCode"  id="streetCode" okText="确定" cancelText="取消" v-model="baseData.streetCode"
-                          interface="action-sheet" placeholder="请选择镇/街" >
-                <ion-select-option v-for=" (it,key) in streetList" :key="key" :value="it.code">
-                  {{ it.name }}
-                </ion-select-option>
-              </ion-select>
-            </ion-item>
-            <ion-item>
-              <ion-label>联系人</ion-label>
-              <ion-input name="userName" id="userName"  style="text-align: right;"  placeholder="请输入联系人姓名" v-model="baseData.userName" ></ion-input>
-            </ion-item>
-            <ion-item>
-              <ion-label>家庭住址</ion-label>
-              <ion-input name="familyAddress" id="familyAddress"  style="text-align: right;"   placeholder="请输入家庭住址" v-model="baseData.familyAddress" ></ion-input>
-            </ion-item>
-            <ion-item>
-              <ion-label>电子邮箱</ion-label>
-              <ion-input name="email" id="email"  style="text-align: right;"  placeholder="请输入电子邮箱" v-model="baseData.email" ></ion-input>
-            </ion-item>
-            <ion-item>
-              <ion-label>兴趣爱好</ion-label>
-              <ion-input name="hobby" id="hobby"  style="text-align: right;"  placeholder="请输入兴趣爱好" v-model="baseData.hobby" ></ion-input>
-            </ion-item>
-          </ion-item-group>
-        </div>
-       <!-----------------------------------------教育经历----------------------------------------------->
-        <div  v-if="curStepData.statusVal==2" >
           <ion-item>
-            <ion-item class="panel-title2">
-              <div class="item-flag"></div>
-              教育经历
-            </ion-item>
-            <ion-buttons slot="end">
-              <ion-icon :icon="addCircleOutline"  class="iconBtn"
-                        @click="onPathForward('./educationEdit',null,null,2)"></ion-icon>
-            </ion-buttons>
+            <ion-label>健康状况</ion-label>
+            <ion-select name="healthID"  id="healthID" okText="确定" cancelText="取消" v-model="baseData.healthID"
+                        interface="action-sheet" placeholder="请选择健康状况" >
+              <ion-select-option v-for=" (it,key) in userHealthList" :key="key" :value="it.value">
+                {{ it.name }}
+              </ion-select-option>
+            </ion-select>
           </ion-item>
-          <ion-item v-for="(record,key) in educationList" :key="key" detail
-                    @click="onPathForward('./educationEdit',record.educationID,null,2)">
-              <ion-label>
-                <h3>{{record.schoolName}}</h3>
-                <p>{{dayjs(record.schoolTime).format("YYYY-MM-DD")}}至{{dayjs(record.overTime).format("YYYY-MM-DD")}}</p>
-              </ion-label>
+          <ion-item>
+            <ion-label>血型</ion-label>
+            <ion-select name="bloodTypeID"  id="bloodTypeID" okText="确定" cancelText="取消" v-model="baseData.bloodTypeID"
+                        interface="action-sheet" placeholder="请选择血型" >
+              <ion-select-option v-for=" (it,key) in bloodTypeList" :key="key" :value="it.value">
+                {{ it.name }}
+              </ion-select-option>
+            </ion-select>
           </ion-item>
-          <b-empty v-if="educationList.length==0"  :loading="loading" />
-        </div>
-
-      <!--------------------------------------------求职意向-------------------------------------------->
-      <div v-if="curStepData.statusVal==3">
+          <ion-item>
+            <ion-label>身高</ion-label>
+            <ion-input name="height" id="height"  style="text-align: right;"  placeholder="请输入身高" v-model="baseData.height" ></ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-label>视力</ion-label>
+            <ion-input name="vision" id="vision"  style="text-align: right;"  placeholder="请输入视力" v-model="baseData.vision" ></ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-label>体重</ion-label>
+            <ion-input name="weight" id="weight"  style="text-align: right;"  placeholder="请输入体重" v-model="baseData.weight" ></ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-label>婚姻状况</ion-label>
+            <ion-select name="maritalStatusID"  id="maritalStatusID" okText="确定" cancelText="取消" v-model="baseData.maritalStatusID"
+                        interface="action-sheet" placeholder="请选择婚姻状况" >
+              <ion-select-option v-for=" (it,key) in maritalStatusList" :key="key" :value="it.value">
+                {{ it.name }}
+              </ion-select-option>
+            </ion-select>
+          </ion-item>
+          <ion-item>
+            <ion-label>省份</ion-label>
+            <ion-select name="provinceCode"  id="provinceCode" okText="确定" cancelText="取消" v-model="baseData.provinceCode"
+                        interface="action-sheet" placeholder="请选择省份" @change="provinceChange()" >
+              <ion-select-option v-for=" (it,key) in provinceList" :key="key" :value="it.code">
+                {{ it.name }}
+              </ion-select-option>
+            </ion-select>
+          </ion-item>
+          <ion-item>
+            <ion-label>市/县</ion-label>
+            <ion-select name="regionCode"  id="regionCode" okText="确定" cancelText="取消" v-model="baseData.regionCode"
+                        interface="action-sheet" placeholder="请选择市/县"  @ionChange="regionChange()" >
+              <ion-select-option v-for=" (it,key) in regionList" :key="key" :value="it.code">
+                {{ it.name }}
+              </ion-select-option>
+            </ion-select>
+          </ion-item>
+          <ion-item>
+            <ion-label>镇/街</ion-label>
+            <ion-select name="streetCode"  id="streetCode" okText="确定" cancelText="取消" v-model="baseData.streetCode"
+                        interface="action-sheet" placeholder="请选择镇/街" >
+              <ion-select-option v-for=" (it,key) in streetList" :key="key" :value="it.code">
+                {{ it.name }}
+              </ion-select-option>
+            </ion-select>
+          </ion-item>
+          <ion-item>
+            <ion-label>联系人</ion-label>
+            <ion-input name="userName" id="userName"  style="text-align: right;"  placeholder="请输入联系人姓名" v-model="baseData.userName" ></ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-label>家庭住址</ion-label>
+            <ion-input name="familyAddress" id="familyAddress"  style="text-align: right;"   placeholder="请输入家庭住址" v-model="baseData.familyAddress" ></ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-label>电子邮箱</ion-label>
+            <ion-input name="email" id="email"  style="text-align: right;"  placeholder="请输入电子邮箱" v-model="baseData.email" ></ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-label>兴趣爱好</ion-label>
+            <ion-input name="hobby" id="hobby"  style="text-align: right;"  placeholder="请输入兴趣爱好" v-model="baseData.hobby" ></ion-input>
+          </ion-item>
+        </ion-item-group>
+      </ion-list>
+      <ion-list  v-if="curStepData.statusVal==2" >
         <ion-item>
-          <div class="panel-title2">
+          <ion-item class="panel-title2"  slot="start">
+            <div class="item-flag"></div>
+            教育经历
+          </ion-item>
+          <ion-buttons slot="end">
+            <ion-icon :icon="addCircleOutline"  class="iconBtn"
+                      @click="onPathForward('./educationEdit',null,null,2)"></ion-icon>
+          </ion-buttons>
+        </ion-item>
+        <ion-item v-for="(record,key) in educationList" :key="key" detail
+                  @click="onPathForward('./educationEdit',record.educationID,null,2)">
+          <ion-label>
+            <h3>{{record.schoolName}}</h3>
+            <p>{{dayjs(record.schoolTime).format("YYYY-MM-DD")}}至{{dayjs(record.overTime).format("YYYY-MM-DD")}}</p>
+          </ion-label>
+        </ion-item>
+        <b-empty v-if="educationList.length==0"  :loading="loading" />
+      </ion-list>
+      <ion-list  v-if="curStepData.statusVal==3">
+        <ion-item>
+          <div class="panel-title2"  slot="start">
             <div class="item-flag"></div>
             求职意向
           </div>
@@ -229,13 +224,12 @@
         <ion-item  v-for="(record,key) in jobHuntList" :key="key" detail
                    @click="onPathForward( './jobHuntEdit',null,record.jobHuntID,3)">
           <ion-label>
-            <h3>{{record.jobUserTypeStr}}</h3>
+            <h3>{{record.postName}}</h3>
             <p>期望薪资:{{record.minSalary}}-{{record.maxSalary}}</p>
           </ion-label>
         </ion-item>
         <b-empty  v-if="jobHuntList.length==0"  :loading="loading" />
-      </div>
-
+      </ion-list>
         <!--<ion-refresher pulling-text="下拉刷新" @ionRefresh="onRefresh"></ion-refresher>-->
         <ion-infinite-scroll v-if="curStepData.statusVal!=1" threshold="100px" @ionInfinite="onScroll($event)">
           <ion-infinite-scroll-content
@@ -247,8 +241,8 @@
     <ion-footer>
       <ion-toolbar>
         <div slot="end">
-          <ion-button class="next-btn" @click="onSave"  v-if="curStepData.statusVal!=3">下一步</ion-button>
-          <ion-button class="next-btn" @click="onFinish" v-if="curStepData.statusVal==3">完  成</ion-button>
+          <ion-button shape="round" expand="block" @click="onSave"   v-if="curStepData.statusVal!=3">下一步</ion-button>
+          <ion-button shape="round" expand="block" @click="onFinish" v-if="curStepData.statusVal==3">完  成</ion-button>
         </div>
       </ion-toolbar>
     </ion-footer>
@@ -352,6 +346,7 @@ export default defineComponent({
           keyPersonTypeID:{required},
         }}});
     const baseDataValid = useVuelidate(baseDataRule,baseInfoData);
+
     const expandChange= ()=>{
       expand.value = !expand.value;
     }

+ 14 - 8
h5app/src/views/pages/jobuser/educationEdit.vue

@@ -79,10 +79,15 @@
     <ion-footer>
       <ion-toolbar>
         <div slot="end">
-          <ion-button class="next-btn" @click="onSave" >保  存</ion-button>
+          <ion-button shape="round" expand="block"  @click="onSave" >保  存</ion-button>
         </div>
       </ion-toolbar>
     </ion-footer>
+    <ion-loading
+        :is-open="loading"
+        message="加载中..."
+        @didDismiss="setOpen(false)" >
+    </ion-loading>
   </ion-page>
 </template>
 <script lang="ts">
@@ -111,6 +116,7 @@ export default defineComponent({
   setup() {
     const router = useRouter();
     const route = useRoute();
+    const loading = ref(false);
     const editForm = ref();
     const curStepData = ref<StepParams>({
       name:"",
@@ -139,6 +145,9 @@ export default defineComponent({
           overTime:{required},
         }}});
     const educationValid = useVuelidate(educationRules,educationData);
+    const setOpen = (isOpen: boolean) => {
+      loading.value = isOpen;
+    };
     const presentAlert = async (message: string) => {
       const alert = await alertController.create({
         header: '错误!',
@@ -175,12 +184,14 @@ export default defineComponent({
     }
 
     const loadData = async (educationID: any,jobUserID:any,status:any) => {
+      loading.value = true;
       await getCultureRankList();
       const reqData = await getEducationByID(educationID);
       curStepData.value.statusVal = status;
       educationData.dataModel = reqData;
       educationData.dataModel.jobuserID = jobUserID;
       console.log("初始化教育经历",educationData.dataModel);
+      loading.value = false;
     };
 
     const reload = (educationID: any,jobUserID:any,status:any) => {
@@ -199,24 +210,19 @@ export default defineComponent({
       curStepData,
       stepList,
       cultureRankList,
+      setOpen,
       onSave,
       onCancel,
       loadData,
       route,
       router,
+      loading,
       educationValid
     }
   }
 });
 </script>
 <style lang="less">
-.next-btn {
-  width: 80px;
-  border-radius: 5px;
-  background-color:#3a7be0;
-  color: #363432;
-  font-size: 14px;
-}
 
 .stepFlex {
   margin: 0;

+ 40 - 9
h5app/src/views/pages/jobuser/jobHuntEdit.vue

@@ -44,6 +44,16 @@
               </ion-select>
               <ion-note slot="error">求职类型不能为空</ion-note>
             </ion-item>
+            <ion-item :class="[huntDataValid.dataModel.postID.$error?'ion-invalid':'ion-valid']">
+              <ion-label>求职岗位<span class="danger">*</span></ion-label>
+              <ion-select name="postID"  id="postID" okText="确定" cancelText="取消" v-model="dataModel.postID"
+                          interface="action-sheet" placeholder="请选择求职岗位" >
+                <ion-select-option v-for=" (it,key) in allPostList" :key="key" :value="it.postID">
+                  {{ it.postName }}
+                </ion-select-option>
+              </ion-select>
+              <ion-note slot="error">求职岗位不能为空</ion-note>
+            </ion-item>
             <ion-item :class="[huntDataValid.dataModel.jobUserType.$error?'ion-invalid':'ion-valid']">
               <ion-label>人才类型<span class="danger">*</span></ion-label>
               <ion-select name="jobUserType"  id="jobUserType" okText="确定" cancelText="取消" v-model="dataModel.jobUserType"
@@ -79,9 +89,14 @@
     <ion-footer>
       <ion-toolbar>
         <div slot="end">
-          <ion-button class="next-btn" @click="onSave">保  存</ion-button>
+          <ion-button shape="round" expand="block"  @click="onSave">保  存</ion-button>
         </div>
       </ion-toolbar>
+      <ion-loading
+          :is-open="loading"
+          message="加载中..."
+          @didDismiss="setOpen(false)" >
+      </ion-loading>
     </ion-footer>
   </ion-page>
 </template>
@@ -93,6 +108,7 @@ import {required} from "@vuelidate/validators";
 import {useVuelidate} from "@vuelidate/core";
 import {getJobHuntByID,saveJobHunt} from "@/api/jobHuntInfo";
 import {getSysDictionaryList} from '@/api/system/dictionary';
+import {getPostList} from '@/api/post'
 import {alertController, onIonViewDidEnter} from "@ionic/vue";
 
 interface huntModel {
@@ -117,6 +133,7 @@ export default defineComponent({
   setup() {
     const router = useRouter();
     const route = useRoute();
+    const loading = ref(false);
     const editForm = ref();
     const curStepData = ref<StepParams>({
       name:"",
@@ -126,6 +143,7 @@ export default defineComponent({
       {title: '基础信息', desc: '个人基础信息', val: 1},
       {title: '教育经历', desc: '完事个人教育经历',val: 2},
       {title: '求职意向', desc: '个人求职意向', val: 3}]);
+    const allPostList = ref([]);
     const jobHuntTypeList = ref<SelectProps[]>([]);
     const jobUserTypeList =ref<SelectProps[]>([]);
 
@@ -134,6 +152,7 @@ export default defineComponent({
         workName:null,
         jobHuntType:null,
         jobUserType:null,
+        postID:null,
         minSalary:null,
         maxSalary:null,
         workYear:null,
@@ -144,12 +163,18 @@ export default defineComponent({
           workName:{required},
           jobHuntType:{required},
           jobUserType:{required},
+          postID:{required},
           minSalary:{required},
           maxSalary:{required},
           workYear:{required},
           areaWork:{required},
         }}});
     const huntDataValid = useVuelidate(huntDataRule,jobHuntData);
+
+    const setOpen = (isOpen: boolean) => {
+      loading.value = isOpen;
+    };
+
     const presentAlert = async (message: string) => {
       const alert = await alertController.create({
         header: '错误!',
@@ -161,6 +186,12 @@ export default defineComponent({
 
       await alert.present();
     }
+
+    const getAllPostList = async function(){
+      const allPostResult :any = await getPostList();
+      allPostList.value = allPostResult.list;
+      console.log("allPostList",allPostList.value);
+    }
     const getJobHuntTypeList = async function(){
       const data :any = await getSysDictionaryList("JobHuntType");
       jobHuntTypeList.value = data;
@@ -190,6 +221,7 @@ export default defineComponent({
 
 
     const loadData = async (jobHuntID: any,jobUserID:any,status:any) => {
+      await getAllPostList();
       await getJobHuntTypeList();
       await getJobUserTypeList();
       const reqData = await getJobHuntByID(jobHuntID);
@@ -197,6 +229,7 @@ export default defineComponent({
       jobHuntData.dataModel = reqData;
       jobHuntData.dataModel.jobUserID = jobUserID;
       console.log("初始化求职意向 ",jobHuntData.dataModel);
+      loading.value = false;
     };
 
     const reload = (educationID: any,jobUserID:any,status:any) => {
@@ -204,8 +237,10 @@ export default defineComponent({
     }
 
     onIonViewDidEnter(() => {
-      if (route.query.reload)
+      if (route.query.reload){
+        loading.value = true;
         reload(route.query.jobHuntID,route.query.jobUserID,route.query.status);
+      }
     });
 
     return {
@@ -215,26 +250,22 @@ export default defineComponent({
       editForm,
       curStepData,
       stepList,
+      allPostList,
       jobUserTypeList,
       jobHuntTypeList,
+      setOpen,
       onSave,
       onCancel,
       loadData,
       route,
       router,
+      loading,
       huntDataValid
     }
   }
 });
 </script>
 <style lang="less">
-.next-btn {
-  width: 80px;
-  border-radius: 5px;
-  background-color:#3a7be0;
-  color: #363432;
-  font-size: 14px;
-}
 
 .stepFlex {
   margin: 0;

+ 6 - 3
h5app/src/views/pages/jobuser/list.vue

@@ -13,7 +13,7 @@
     </ion-header>
     <ion-content>
       <ion-item  class="search-item">
-        <ion-input v-model="searchParamsState.name" style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;"></ion-input>
+        <ion-input  placeholder="请输入求职人员姓名" v-model="searchParamsState.name" style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;"></ion-input>
         <ion-button slot="end" style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;" @click="reload">搜索</ion-button>
       </ion-item>
       <ion-list  class="list-content" >
@@ -23,7 +23,7 @@
           </ion-avatar>
           <ion-label>
             <h3>{{ record.name }}</h3>
-            <p>已推荐岗位:{{searchParamsState.total}}</p>
+            <p>已推荐岗位:{{record.recommendedCount}}</p>
           </ion-label>
         </ion-item>
       </ion-list>
@@ -137,10 +137,13 @@ export default defineComponent({
 
 .jobuser-list-page{
   .list-content{
+    margin: 0px 15px !important;
     background-color: white !important;
     border-radius: 0 !important;
     ion-item{
-      border: none !important;
+      margin-top: 10px;
+      font-size: 14px;
+      border: 1px solid rgb(242, 242, 245);
       p{
         font-size: 12px;
       }

+ 398 - 0
h5app/src/views/pages/post/detail.vue

@@ -0,0 +1,398 @@
+<template>
+  <ion-page  class="list-page">
+    <ion-header  class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onBack" style="padding-left:10px;width:24px;height:24px;"></ion-icon>
+        </ion-buttons>
+        <ion-title>岗位推荐</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-list>
+        <ion-grid style="border:none;border-bottom: 1px solid black;margin:0px 15px 5px 15px;padding:0px;">
+            <ion-row>
+              <ion-col size="8">
+                  <ion-label style="font-size:20px;font-weight:bold;">{{ dataModel.name }}</ion-label>
+                  <p style="font-size: 14px;">
+                    意向岗位:{{ dataModel.postNames }}
+                  </p>
+              </ion-col>
+              <ion-col size="4" style="display:flex;align-items: center;justify-content: right;overflow: hidden;">
+                <ion-label>
+                  <div>
+                    <ion-label style="text-align:left;color:#3a7be0;">◆</ion-label>
+                    <ion-label>正在跟进</ion-label>
+                  </div>
+                  <p style="margin-top: 10px;">
+                    已推荐数量:{{ dataModel.recommendedCount }}
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+          </ion-grid>
+      </ion-list>
+      <ion-item style="border: 1px solid #a0a0a0;margin:0px 10px 10px 10px;border-radius: 12px;"
+                v-for="(record,key) in recommendPostList"  :key="key" detail>
+        <ion-row style="width: 100%;">
+          <ion-col size="10">
+            <ion-grid>
+              <ion-row>
+                <ion-col>
+                  <ion-label style="display: flex;justify-content: space-between;">
+                    <ion-text>
+                      {{ record.postName }}
+                    </ion-text>
+                  </ion-label>
+                </ion-col>
+              </ion-row>
+              <ion-row>
+                <ion-col>
+                  <ion-label>
+                    <p>
+                      {{ record.companyName }}
+                    </p>
+                  </ion-label>
+                </ion-col>
+              </ion-row>
+              <ion-row>
+                <ion-col>
+                  <ion-label style="display: flex;justify-content: space-between;">
+                    <p>
+                      参保人数:{{ record.insuredCount }}人
+                    </p>
+                    <p>
+                      招聘人数:{{ record.recruitCount }}人
+                    </p>
+                  </ion-label>
+                </ion-col>
+              </ion-row>
+            </ion-grid>
+          </ion-col>
+          <ion-col size="2" style="display: flex;align-items: center;justify-content: right;">
+            <a @click="onCommend(record)" style="font-size: 13px;">{{ record.isRead==true?"已推荐":"推荐" }}</a>
+          </ion-col>
+        </ion-row>
+      </ion-item>
+      <b-empty v-if="recommendPostList.length<=0" :loading="formStatus.loading"/>
+      <ion-infinite-scroll  threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="formStatus.total>pageParams.pageIndex*pageParams.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+    <ion-footer>
+      <ion-toolbar>
+        <div slot="end">
+          <ion-button shape="round" expand="block" @click="onAllRecommend">全部推荐</ion-button>
+        </div>
+      </ion-toolbar>
+      <ion-loading
+          :is-open="formStatus.loading"
+          message="加载中..."
+          @didDismiss="setOpen(false)" >
+      </ion-loading>
+    </ion-footer>
+  </ion-page>
+</template>
+<script lang="ts">
+import {arrowBackOutline,addCircleOutline} from 'ionicons/icons';
+import {reactive,defineComponent,watch,ref,toRefs} from "vue";
+import {useRoute, useRouter} from "vue-router";
+import {getJobUserById,getUserHuntList} from "@/api/jobUserInfo";
+import {getCommendPostList,saveCommendPost,saveCommendPostList} from "@/api/post";
+import {alertController, onIonViewDidEnter} from "@ionic/vue";
+import dayjs from "dayjs";
+
+interface SelectProps {
+  name: string,
+  value: string
+}
+interface PostModel{
+  postName: string,
+  postID: number
+}
+
+interface UserInfoModel {
+  jobUserID:string,
+  name:string,
+  postNames:string,
+  recommendedCount:number
+}
+
+interface RecommendModel{
+  recommendID:string,
+  jobUserID:string,
+  postID:string,
+  postName:string,
+  companyName:string,
+  insuredCount:number,
+  recruitCount:number,
+  isRead:boolean
+}
+
+export default defineComponent({
+  name: 'postDetail',
+  setup() {
+    const router = useRouter();
+    const route = useRoute();
+    const editForm = ref();
+    const commendStr = ref("推荐");
+    const dataModel = ref<UserInfoModel>({
+        jobUserID:'',
+        name:'',
+        postNames:'',
+        recommendedCount:0
+    });
+    const huntJobList = ref<PostModel[]>([]);
+    const recommendPostList = ref<RecommendModel[]>([]);
+    const pageParams = reactive({
+      pageIndex: 1,
+      pageSize: 7,
+      jobUserID:null
+    });
+    const formStatus = reactive({
+      total:0,
+      loading:false
+    })
+
+    const setOpen = (isOpen: boolean) => {
+      formStatus.loading = isOpen;
+    };
+
+    const presentAlert = async (title:string,message: string) => {
+      const alert = await alertController.create({
+        header: title,
+        message: message,
+        buttons: [
+          '确定'
+        ],
+      });
+
+      await alert.present();
+    }
+
+    const onBack = () => {
+        router.push("./recommend");
+    }
+
+    const onCommend = async function (item:any){
+      if(item.isRead){
+        await presentAlert("提示","已推荐该岗位!");
+        return null;}
+      const saveData = {recommendID:item.recommendID,jobUserID:dataModel.value.jobUserID,postID:item.postID,isRead:1}
+      await saveCommendPost(saveData);
+      reload(dataModel.value.jobUserID);
+    }
+
+    const onAllRecommend = async function(){
+      const finallyList = ref<any[]>([]);
+      if(recommendPostList.value.length<1){
+        await presentAlert("提示:","暂无可供推荐的岗位!")
+        return null;
+      }else{
+        for(let i=0;i < recommendPostList.value.length;i++){
+          if(!recommendPostList.value[i].isRead){
+            const saveData = {recommendID:recommendPostList.value[i].recommendID,jobUserID:recommendPostList.value[i].jobUserID,postID:recommendPostList.value[i].postID,isRead:1}
+            finallyList.value.push(saveData);
+          }
+        }
+      }
+      if(finallyList.value.length>0){
+        await saveCommendPostList(finallyList.value);
+        reload(dataModel.value.jobUserID);
+      }else{
+        await presentAlert("提示:","所有岗位都已推荐给该求职人!")
+        return null;
+      }
+    }
+
+    const onScroll = (e: any) => {
+        setTimeout(() => {
+          e.target.complete();
+          if (formStatus.total  > pageParams.pageIndex * pageParams.pageSize) {
+            pageParams.pageSize += 10;
+            loadData(pageParams);
+          }
+        }, 500);
+    }
+
+    const onFinish = () => {
+      router.push("./list");
+    }
+
+
+    const getCurHuntList = async function(jobUserID:any){
+      const huntJobResult :any = await getUserHuntList(jobUserID);
+      huntJobList.value = huntJobResult;
+      /*处理意向岗位显示*/
+      dataModel.value.postNames = '';
+      if(huntJobList.value.length>0){
+        for(let i=0;i<huntJobList.value.length;i++){
+          if(i<huntJobList.value.length-1){
+            dataModel.value.postNames += huntJobList.value[i].postName+",";
+          }else{
+            dataModel.value.postNames += huntJobList.value[i].postName;
+          }
+        }
+      }
+      console.log("huntJobList",huntJobList.value);
+    }
+    const getCurCommendPostList = async function(searchParams:any){
+      const huntPostResult :any = await getCommendPostList(searchParams);
+      recommendPostList.value = huntPostResult.list;
+      console.log("recommendPostList",recommendPostList.value);
+    }
+
+    const loadData = async (jobUserID: any) => {
+      formStatus.loading = true;
+      /*查询求职人员信息*/
+      const userInfo :any = await getJobUserById(jobUserID);
+      dataModel.value = userInfo;
+      /*查询求职意向信息*/
+      await getCurHuntList(jobUserID);
+      console.log("当前dataModel",dataModel.value);
+      /*查询推荐岗位信息*/
+      pageParams.jobUserID = jobUserID;
+      await getCurCommendPostList(pageParams);
+      formStatus.loading = false;
+    };
+
+    watch(() => route.query, () => {
+      if (route.query.reload) {
+        loadData(route.query.jobUserID);
+      }
+    });
+
+    const reload = (jobUserID:any) => {
+      pageParams.pageIndex = 1;
+      recommendPostList.value = [];
+      dataModel.value.recommendedCount = 0;
+      loadData(jobUserID);
+    }
+
+    onIonViewDidEnter(() => {
+      if (route.query.reload)
+        reload(route.query.jobUserID);
+    });
+
+    return {
+      arrowBackOutline,
+      addCircleOutline,
+      route,
+      router,
+      editForm,
+      dataModel,
+      huntJobList,
+      recommendPostList,
+      pageParams,
+      formStatus,
+      commendStr,
+      setOpen,
+      onCommend,
+      onAllRecommend,
+      onBack,
+      onFinish,
+      onScroll,
+      loadData,
+      getCurHuntList,
+      reload,
+      dayjs
+    }
+  }
+});
+</script>
+<style lang="less">
+.next-btn {
+  width: 80px;
+  border-radius: 5px;
+  background-color:#3a7be0;
+  color: #363432;
+  font-size: 14px;
+}
+
+.iconBtn{
+  width:24px;
+  height:24px;
+}
+
+.stepFlex {
+  margin: 0;
+  display: flex;
+  width: 100%;
+
+  .stepFlex-item {
+    position: relative;
+    flex: 1;
+    text-align: center;
+    margin-top: -10px;
+
+    .stepFlex-item-label {
+      padding-top: 60px;
+      font-size: 14px;
+
+      .stepFlex-item-label-title{
+        margin-top:30px;
+      }
+
+      .stepFlex-item-label-desc{
+        margin-top:5px;color: #b9b9bd;
+      }
+    }
+  }
+
+  .greenCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+  }
+
+  .now {
+    top: calc(50% - 18px);
+    left: calc(50% - 8px);
+    position: absolute;
+    z-index: 3;
+    width: 16px;
+    height: 16px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+    border: 4px solid #c5e8f9;
+  }
+
+  .grayCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #ccc;
+  }
+
+  .greenLine {
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    height: 2px;
+    background-color: #31A2FE;
+    position: absolute;
+  }
+
+  .grayLine {
+    height: 0;
+    border: 1px dashed #ccc;
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    position: absolute;
+  }
+}
+
+</style>

+ 36 - 131
h5app/src/views/pages/post/recommend.vue

@@ -1,189 +1,94 @@
 <template>
-  <ion-page class="list-page post-recomment-page">
+  <ion-page class="list-page post-recommend-page">
     <ion-header class="header-theme2">
       <ion-toolbar>
         <ion-buttons slot="start">
           <ion-icon :icon="arrowBackOutline" @click="()=>router.push('../')"></ion-icon>
         </ion-buttons>
         <ion-title>岗位推荐</ion-title>
-        <!--        <ion-buttons slot="end">
-                  <ion-icon :icon="addCircleOutline" @click="onAdd()"></ion-icon>
-                </ion-buttons>-->
       </ion-toolbar>
     </ion-header>
     <ion-content>
       <ion-item style="margin: 10px 0;">
-        <ion-input style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;"
-                   ></ion-input>
-        <ion-button slot="end" style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;">查询</ion-button>
+        <ion-input  placeholder="请输入求职人员姓名" v-model="searchParamsState.name" style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;"></ion-input>
+        <ion-button slot="end" style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;"  @click="reload">查询</ion-button>
       </ion-item>
-      <ion-item>
-        <ion-grid>
-          <ion-row>
-            <ion-col>
-              <ion-label style="display: flex;justify-content: space-between;">
-                <ion-text>
-                  王佳佳
-                </ion-text>
-                <p style="color: #0d0d0d">
-                  正在跟进
-                </p>
-              </ion-label>
-            </ion-col>
-          </ion-row>
-          <ion-row>
-            <ion-col>
-              <ion-label style="display: flex;justify-content: space-between;">
-                <p style="color: #0d0d0d">
-                  意向岗位:保安、仓管
-                </p>
-                <p style="color: #0d0d0d">
-                  已推荐数量:2
-                </p>
-              </ion-label>
-            </ion-col>
-          </ion-row>
-        </ion-grid>
-      </ion-item>
-      <ion-list class="list-content">
-        <ion-item v-for="(record,key) in dataList" :key="key" detail>
-          <ion-row style="width: 100%;">
-            <ion-col size="10">
-              <ion-grid>
-                <ion-row>
-                  <ion-col>
-                    <ion-label style="display: flex;justify-content: space-between;">
-                      <ion-text>
-                        {{ record.postName }}
-                      </ion-text>
-                    </ion-label>
-                  </ion-col>
-                </ion-row>
-                <ion-row>
-                  <ion-col>
-                    <ion-label>
-                      <p>
-                        {{ record.companyName }}
-                      </p>
-                    </ion-label>
-                  </ion-col>
-                </ion-row>
-                <ion-row>
-                  <ion-col>
-                    <ion-label style="display: flex;justify-content: space-between;">
-                      <p>
-                        参保人数:16人
-                      </p>
-                      <p>
-                        招聘人数:6
-                      </p>
-                    </ion-label>
-                  </ion-col>
-                </ion-row>
-              </ion-grid>
-            </ion-col>
-            <ion-col size="2" style="display: flex;align-items: center;justify-content: right;">
-              <a>推荐</a>
-            </ion-col>
-          </ion-row>
+      <ion-list  class="list-content" >
+        <ion-item v-for="(record,key) in dataList" :key="key" detail  @click="onSearch(record.jobUserID)">
+          <ion-avatar aria-hidden="true" slot="start">
+            <img alt="" src="@/assets/icon/avatar.svg" />
+          </ion-avatar>
+          <ion-label>
+            <h3>{{ record.name }}</h3>
+            <p>已推荐岗位:{{record.recommendedCount}}</p>
+          </ion-label>
         </ion-item>
-
-        <ion-button class="select-btn">
-          全部推荐
-        </ion-button>
       </ion-list>
-      <b-empty v-if="dataList.length<=0" :loading="loading"/>
-      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
-        <ion-infinite-scroll-content
-            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
-            loadingSpinner="bubbles">
-        </ion-infinite-scroll-content>
-      </ion-infinite-scroll>
     </ion-content>
   </ion-page>
 </template>
 
 <script lang="ts">
-
-import {computed, defineComponent, reactive, ref} from 'vue';
-import dayjs from "dayjs";
-import {useRoute, useRouter} from "vue-router";
-import {arrowBackOutline, ellipse, addCircleOutline} from 'ionicons/icons';
 import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
-import BEmpty from "@/components/empty.vue";
+import {arrowBackOutline,addCircleOutline} from 'ionicons/icons';
+import {defineComponent, reactive, ref} from 'vue';
+import {useRouter} from "vue-router";
+import {getJobUserList} from "@/api/jobUserInfo"
 
 export default defineComponent({
-  name: 'PostRecomment',
-  components: {IonIcon, BEmpty},
+  name: 'PostRecommend',
+  components: {IonIcon},
   setup() {
+    const searchParamsState = reactive({pageIndex: 1, pageSize: 10, total:0, name:''})
     const loading = ref(true);
-    const pagination = computed(() => ({
-      total: total,
-      current: searchParamsState.page,
-      pageSize: searchParamsState.rows
-    }));
+    const isSearch = ref(false);
     const dataList = ref<any>([]);
     const router = useRouter();
-    const route = useRoute();
-    const total = ref(15);
     const colors = ref(["secondary", "tertiary", "success", "warning"]);
 
-    const searchParamsState = reactive({page: 1, rows: 10, writeStatus: null})
-
     const loadData = async function () {
       loading.value = true;
-
-      /*const result: any = await getMyIntentionList(searchParamsState);
+      const result: any = await getJobUserList(searchParamsState);
       dataList.value = dataList.value.concat(result.list);
-      total.value = result.total;*/
-
-      dataList.value = [{companyName: '惠州市AA信息科技有限公司', postName: "保安", updateTime: '2023-12-11'},
-        {
-          companyName: '惠州市BB信息科技有限公司',
-          postName: "保安",
-          updateTime: '2023-12-12'
-        }, {companyName: '惠州市CC信息科技有限公司', postName: "仓管", updateTime: '2023-12-13'}];
+      console.log("dataList",dataList.value);
+      searchParamsState.total = result.total;
       loading.value = false;
     }
 
-    const reload = () => {
-      dataList.value = [];
-      searchParamsState.page = 1;
-      loadData();
-    }
-
     const onScroll = (e: any) => {
       setTimeout(() => {
         e.target.complete();
-        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
-          pagination.value.current += 1;
+        if (searchParamsState.total > searchParamsState.pageIndex * searchParamsState.pageSize) {
+          searchParamsState.pageSize += 10;
           loadData();
         }
       }, 500);
     }
 
-    const onAdd = (item: any) => {
-      router.push({path: './edit', query: {reload: 1, id: ""}});
+    const onSearch = (jobUserID:any) => {
+      router.push({path: './detail', query: {reload:1,jobUserID:jobUserID}});
     }
 
+    const reload = () => {
+      dataList.value = [];
+      searchParamsState.pageIndex = 1;
+      loadData();
+    }
     onIonViewDidEnter(() => {
       reload();
     });
 
     return {
       router,
-      pagination,
       colors,
-      reload,
+      isSearch,
       loading,
       searchParamsState,
       dataList,
-      total,
-      dayjs,
       onScroll,
-      onAdd,
       loadData,
-      ellipse,
+      reload,
+      onSearch,
       arrowBackOutline,
       addCircleOutline,
     }
@@ -192,7 +97,7 @@ export default defineComponent({
 </script>
 
 <style lang="less">
-.post-recomment-page {
+.post-recommend-page {
   .list-content {
     margin: 0px 15px !important;
     background-color: white !important;

+ 10 - 38
h5app/src/views/pages/user/myInfo.vue

@@ -10,49 +10,26 @@
     </ion-header>
     <ion-content>
       <form class="form-table">
-<!--        <ion-item>
-          <ion-label>
-            所属学校
-          </ion-label>
-          <ion-text></ion-text>
-        </ion-item>-->
         <ion-item>
-          <ion-label>工号号</ion-label>
-          <ion-text>2023010012</ion-text>
+          <ion-label>登录名</ion-label>
+          <ion-text>{{ userInfo.loginID }}</ion-text>
         </ion-item>
         <ion-item>
           <ion-label>姓名</ion-label>
-          <ion-text>{{ userInfo.name }}</ion-text>
-        </ion-item>
-        <ion-item>
-          <ion-label>职务</ion-label>
-          <ion-text>驿站工作人员</ion-text>
-        </ion-item>
-        <ion-item>
-          <ion-label>身份证</ion-label>
-          <ion-text>440921199902129176</ion-text>
+          <ion-text>{{ userInfo.siteUserName }}</ion-text>
         </ion-item>
         <ion-item>
           <ion-label>性别</ion-label>
-          <ion-text>男</ion-text>
-        </ion-item>
-        <ion-item>
-          <ion-label>出生年月</ion-label>
-          <ion-text>1999-02-12</ion-text>
-        </ion-item>
-        <ion-item>
-          <ion-label>籍贯</ion-label>
-          <ion-text>广东惠州</ion-text>
+          <ion-text>{{ userInfo.genderName }}</ion-text>
         </ion-item>
         <ion-item>
-          <ion-label>电话号码</ion-label>
-          <ion-text>159188998788</ion-text>
+          <ion-label>人员类别</ion-label>
+          <ion-text>{{ userInfo.userTypeName }}</ion-text>
         </ion-item>
         <ion-item>
-          <ion-label>联系地址</ion-label>
-          <ion-text>广东省惠州市惠城区XX小区20号203室</ion-text>
+        <ion-label>电话号码</ion-label>
+          <ion-text>{{ userInfo.userMobile }}</ion-text>
         </ion-item>
-
       </form>
     </ion-content>
 
@@ -60,17 +37,12 @@
 </template>
 
 <script setup lang="ts">
-
-import {arrowBackOutline} from 'ionicons/icons';
+import {defineComponent, onUpdated, reactive, ref} from 'vue';
 import router from '@/router';
 import {useUserStore} from '@/store/modules/user';
-import {onUpdated, reactive, ref} from 'vue';
-
+import {arrowBackOutline} from 'ionicons/icons';
 const userStore = useUserStore();
-
 const userInfo = ref(userStore.getUserInfo);
-
-
 </script>
 
 <style scoped lang="less">

+ 149 - 0
h5app/src/views/pages/work/task/myTask.vue

@@ -0,0 +1,149 @@
+<template>
+  <ion-page class="work-log-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onCancel"></ion-icon>
+        </ion-buttons>
+        <ion-title>{{dayjs(dataModel.finishTime).format("YYYY年MM月DD日")}}工作任务</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <form autocomplete="off">
+        <ion-item>
+          <div class="panel-title2">
+            <div class="item-flag"></div>
+            {{dayjs(dataModel.finishTime).format("YYYY年MM月DD日")}}工作任务,完成内容如下:
+          </div>
+        </ion-item>
+        <ion-list>
+          <ion-item>
+            {{dataModel.content}}
+          </ion-item>
+        </ion-list>
+      </form>
+    </ion-content>
+    <ion-footer>
+      <ion-button shape="round" expand="block"   @click="onSave">已完成</ion-button>
+    </ion-footer>
+    <ion-loading
+        :is-open="loading"
+        message="加载中..."
+        @didDismiss="setOpen(false)" >
+    </ion-loading>
+  </ion-page>
+</template>
+<script lang="ts">
+import {defineComponent, reactive, ref, toRefs} from "vue";
+import {getWorkTaskByID} from '@/api/workTask';
+import {useRoute, useRouter} from "vue-router";
+import {alertController, onIonViewDidEnter} from "@ionic/vue";
+import {arrowBackOutline} from 'ionicons/icons';
+import dayjs from "dayjs";
+
+interface CurDataProps{
+  siteUserID:string,
+  userName:string
+}
+
+interface myTaskModel{
+  dataModel: {
+    doTaskUser: CurDataProps[],
+    doTaskName: null,
+    workTypeID: null,
+    content:null,
+    finishTime:null,
+  }
+}
+
+export default defineComponent({
+  name: 'MyTaskEdit',
+  setup() {
+    const router = useRouter();
+    const route = useRoute();
+    const loading = ref(false);
+    const myTaskData = reactive<myTaskModel>({
+      dataModel:{
+        doTaskUser: [],
+        doTaskName: null,
+        workTypeID: null,
+        content:null,
+        finishTime:null,
+      }});
+
+    const presentAlert = async (message: string) => {
+      const alert = await alertController.create({
+        header: '错误!',
+        message: message,
+        buttons: [
+          '确定'
+        ],
+      });
+      await alert.present();
+    }
+
+    const setOpen = (isOpen: boolean) => {
+      loading.value = isOpen;
+    };
+
+    const onSave = async function (){
+      await presentAlert("干得漂亮");
+      router.back();
+    }
+
+    const onCancel = () => {
+      router.back();
+    }
+
+    const loadData = async (doTaskID: any) => {
+      loading.value = true;
+      const reqData = await getWorkTaskByID(doTaskID);
+      myTaskData.dataModel = reqData;
+      loading.value = false;
+    };
+
+    const reload = (doTaskID: any) => {
+      loadData(doTaskID);
+    }
+
+    onIonViewDidEnter(() => {
+      if (route.query.reload)
+        reload(route.query.doTaskID);
+    });
+
+
+    return {
+      ...toRefs(myTaskData),
+      route,
+      router,
+      loading,
+      arrowBackOutline,
+      setOpen,
+      onSave,
+      onCancel,
+      loadData,
+      dayjs,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.work-log-page {
+  .save-btn {
+    width: 100%;
+    --border-radius: 0px;
+    --background: #f2f2f5;
+    margin: 20px 0 0 0;
+    color: #363432;
+    font-size: 14px;
+  }
+
+  /*input[type="date"]:before {
+    content: attr(placeholder);
+    color: #00d9ff;
+  }*/
+}
+
+
+</style>

+ 8 - 7
h5app/src/views/sapp/tabMain.vue

@@ -1,5 +1,6 @@
 <template>
   <ion-page>
+    <ion-content>
     <div class="tab-main-content">
       <div class="panel" style="margin-top: 125px;">
         <div class="panel-content">
@@ -48,13 +49,12 @@
             我的任务
           </div>
           <ion-list class="list-content" >
-            <ion-item v-for="(record,key) in dataList" :key="key" detail  @click="onDetail(record.doTaskID)">
-              <ion-avatar aria-hidden="true" slot="end" style="width:70px;">
-                {{dayjs(record.finishTime).format("YYYY年MM-DD")}}
-              </ion-avatar>
+            <ion-item style="font-size: 12px;" v-for="(record,key) in dataList" :key="key" detail  @click="onDetail(record.doTaskID)">
               <ion-label>
-                <p>任务名称:{{ record.doTaskName }}</p>
-                <p>任务详情:{{record.content}}</p>
+                ▎{{record.content}}
+              </ion-label>
+              <ion-label slot="end">
+                {{dayjs(record.finishTime).format("YYYY-MM-DD")}}
               </ion-label>
             </ion-item>
           </ion-list>
@@ -68,6 +68,7 @@
         </div>
       </div>
     </div>
+    </ion-content>
   </ion-page>
 </template>
 
@@ -100,7 +101,7 @@ export default defineComponent({
     }
 
     const onDetail = (doTaskID:string) =>{
-      router.push({path: "./work/task/edit", query: {reload:1, doTaskID: doTaskID}});
+      router.push({path: "/tabs/tabMain/work/task/myTask", query: {reload:1, doTaskID: doTaskID}});
     }
 
     const onScroll = (e: any) => {

+ 0 - 12
h5app/src/views/sapp/tabUser.vue

@@ -20,9 +20,6 @@
     <ion-content class="tab-user-content">
       <div class="mine-toolbar">
         <div class="mine-body">
-<!--          <div class="info-title">-->
-<!--            <h3>个人中心</h3>-->
-<!--          </div>-->
           <div class="info-img">
             <img class="img-user" src="@/assets/icon/icon-user-2x.png" onerror="this.src='@/assets/icon/icon-user-2x.png'" />
           </div>
@@ -30,9 +27,6 @@
             <div class="info-text-name" style="color: #fff;">
               <h3>{{user?.name}}</h3>
             </div>
-<!--            <div class="info-text-dp">
-              {{user?.DepartmentName}}-{{user?.RoleName}}
-            </div>-->
           </div>
         </div>
       </div>
@@ -49,12 +43,6 @@
           <img src="@/assets/icon/gywm.png">
           <ion-label>关于我们</ion-label>
         </ion-item>
-
-<!--        <ion-item class="item-menu"  detail mode="md" >-->
-<!--          <img src="@/assets/icon/logon.png">-->
-<!--          <ion-label @click="presentAlert">退出登录</ion-label>-->
-<!--        </ion-item>-->
-
       </ion-list>
       <div class="login-out" @click="presentAlert" v-if="isDev">
         退出登录

+ 26 - 3
src/main/java/com/hz/employmentsite/controller/companyService/PostController.java

@@ -9,7 +9,7 @@ import com.hz.employmentsite.services.service.AccountService;
 import com.hz.employmentsite.services.service.companyService.PostService;
 import com.hz.employmentsite.util.DateUtils;
 import com.hz.employmentsite.util.ExcelHelper;
-import com.hz.employmentsite.vo.companyService.CompanyVo;
+import com.hz.employmentsite.vo.companyService.RecommendPostVo;
 import com.hz.employmentsite.vo.companyService.PostVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -34,6 +34,7 @@ public class PostController {
     @ResponseBody
     @GetMapping("/getList")
     public BaseResponse getList(@RequestParam("pageIndex") int pageIndex, @RequestParam("pageSize") int pageSize,
+                                @RequestParam(required = false) String postID,
                                 @RequestParam(required = false) String postName,
                                 @RequestParam(required = false) Integer minCount,
                                 @RequestParam(required = false) Integer maxCount,
@@ -43,7 +44,29 @@ public class PostController {
                                 @RequestParam(required = false) String companyID
                                 ) {
 
-        PageInfo<PostVo> result = postService.getList(pageIndex, pageSize, null, postName, minCount, maxCount, companyName, recordStatus, workName,companyID);
+        PageInfo<PostVo> result = postService.getList(pageIndex, pageSize, postID, postName, minCount, maxCount, companyName, recordStatus, workName,companyID);
+        return RespGenerstor.success(result);
+    }
+
+    @ResponseBody
+    @GetMapping("/getCommendPostList")
+    public BaseResponse getCommendPostList(@RequestParam("pageIndex") int pageIndex,@RequestParam("pageSize") int pageSize,@RequestParam("jobUserID") String jobUserID) {
+        PageInfo<RecommendPostVo> result = postService.getCommendPostList(pageIndex, pageSize,jobUserID);
+        return RespGenerstor.success(result);
+    }
+
+    @PostMapping("/saveCommendPost")
+    public BaseResponse saveCommendPost(@RequestBody RecommendPostVo data) {
+        var result = postService.saveCommendPost(data, accountService.getLoginUserID());
+        return RespGenerstor.success(result);
+    }
+
+    @PostMapping("/saveCommendPostList")
+    public BaseResponse saveCommendPostList(@RequestBody List<RecommendPostVo> data) {
+        var result = 0;
+        for (RecommendPostVo curData: data) {
+             result += postService.saveCommendPost(curData, accountService.getLoginUserID());
+        }
         return RespGenerstor.success(result);
     }
 
@@ -63,7 +86,7 @@ public class PostController {
     }
 
     @ResponseBody
-    @GetMapping("/delete")
+    @PostMapping("/delete")
     public BaseResponse<Integer> delete(String id) {
         Integer result = postService.delete(id);
         if (result <= 0)

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

@@ -73,6 +73,13 @@ public class JobUserController {
         return RespGenerstor.success(experienceList);
     }
 
+    @ResponseBody
+    @GetMapping("/getUserHuntList")
+    public BaseResponse getUserHuntList(String jobUserID) {
+        var curHuntPostList = jobuserService.getUserHuntList(jobUserID);
+        return RespGenerstor.success(curHuntPostList);
+    }
+
     @ResponseBody
     @PostMapping("/save")
     public BaseResponse Save(@RequestBody JobUserVo data) {

+ 1 - 1
src/main/java/com/hz/employmentsite/controller/taskAndLog/DoTaskController.java

@@ -45,7 +45,7 @@ public class DoTaskController {
     @ResponseBody
     @GetMapping("/getMyWorkTasks")
     public BaseResponse getMyTasks(@RequestParam("pageIndex") int pageIndex, @RequestParam("pageSize") int pageSize) {
-        PageInfo<DoTaskVo> result = doTaskService.getMyTasks(pageIndex,pageSize,accountService.getLoginUserID());
+        PageInfo<DoTaskVo> result = doTaskService.getMyTasks(pageIndex,pageSize,"1060115a-a660-4462-967e-1200a54923dd");
         return RespGenerstor.success(result);
     }
 

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

@@ -5,6 +5,6 @@ import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
-public interface JobuserCQuery {
-    List<JobUserVo> selectJobuserList(@Param("jobuserID") String jobuserID,@Param("name") String name, @Param("siteId")String siteId, @Param("jobStatus")String jobStatus, @Param("sexId")Integer sexId, @Param("educationTypeId")Integer educationTypeId, @Param("emphasisTypeId")Integer emphasisTypeId);
+public interface JobUserCQuery {
+    List<JobUserVo> selectJobUserList(@Param("jobuserID") String jobuserID,@Param("name") String name, @Param("siteId")String siteId, @Param("jobStatus")String jobStatus, @Param("sexId")Integer sexId, @Param("educationTypeId")Integer educationTypeId, @Param("emphasisTypeId")Integer emphasisTypeId);
 }

+ 4 - 0
src/main/java/com/hz/employmentsite/mapper/cquery/PostCQuery.java

@@ -1,6 +1,7 @@
 package com.hz.employmentsite.mapper.cquery;
 
 import com.hz.employmentsite.model.PcPost;
+import com.hz.employmentsite.vo.companyService.RecommendPostVo;
 import com.hz.employmentsite.vo.companyService.PostVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -9,5 +10,8 @@ import java.util.List;
 public interface PostCQuery {
     List<PostVo> selectPostList(@Param("postID")String postID,@Param("postName") String postName, @Param("minCount")Integer minCount, @Param("maxCount")Integer maxCount,
                                 @Param("companyName")String companyName, @Param("RecordStatus") String RecordStatus, @Param("WorkName")String WorkName,@Param("companyID")String companyID);
+
+    List<RecommendPostVo> selectRecommendPostList(@Param("jobUserID") String jobUserID);
+
     int insert(PcPost post);
 }

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

@@ -1,5 +1,4 @@
 package com.hz.employmentsite.mapper.cquery;
-
 import com.hz.employmentsite.vo.jobUserManager.RecommendVo;
 import org.apache.ibatis.annotations.Param;
 

+ 10 - 0
src/main/java/com/hz/employmentsite/model/PcJobhunt.java

@@ -8,6 +8,8 @@ public class PcJobhunt {
 
     private String jobUserID;
 
+    private String postID;
+
     private String workCode;
 
     private String workName;
@@ -50,6 +52,14 @@ public class PcJobhunt {
         this.jobUserID = jobUserID == null ? null : jobUserID.trim();
     }
 
+    public String getPostID() {
+        return postID;
+    }
+
+    public void setPostID(String postID) {
+        this.postID = postID == null ? null : postID.trim();
+    }
+
     public String getWorkCode() {
         return workCode;
     }

+ 70 - 0
src/main/java/com/hz/employmentsite/model/PcJobhuntExample.java

@@ -246,6 +246,76 @@ public class PcJobhuntExample {
             return (Criteria) this;
         }
 
+        public Criteria andPostIDIsNull() {
+            addCriterion("PostID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDIsNotNull() {
+            addCriterion("PostID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDEqualTo(String value) {
+            addCriterion("PostID =", value, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDNotEqualTo(String value) {
+            addCriterion("PostID <>", value, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDGreaterThan(String value) {
+            addCriterion("PostID >", value, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDGreaterThanOrEqualTo(String value) {
+            addCriterion("PostID >=", value, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDLessThan(String value) {
+            addCriterion("PostID <", value, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDLessThanOrEqualTo(String value) {
+            addCriterion("PostID <=", value, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDLike(String value) {
+            addCriterion("PostID like", value, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDNotLike(String value) {
+            addCriterion("PostID not like", value, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDIn(List<String> values) {
+            addCriterion("PostID in", values, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDNotIn(List<String> values) {
+            addCriterion("PostID not in", values, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDBetween(String value1, String value2) {
+            addCriterion("PostID between", value1, value2, "postID");
+            return (Criteria) this;
+        }
+
+        public Criteria andPostIDNotBetween(String value1, String value2) {
+            addCriterion("PostID not between", value1, value2, "postID");
+            return (Criteria) this;
+        }
+
         public Criteria andWorkCodeIsNull() {
             addCriterion("WorkCode is null");
             return (Criteria) this;

+ 55 - 3
src/main/java/com/hz/employmentsite/services/impl/companyService/PostServiceImpl.java

@@ -1,18 +1,19 @@
 package com.hz.employmentsite.services.impl.companyService;
 
+import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.hz.employmentsite.filter.exception.BaseException;
 import com.hz.employmentsite.mapper.PcCompanyMapper;
 import com.hz.employmentsite.mapper.PcPostMapper;
+import com.hz.employmentsite.mapper.PcRecommendMapper;
 import com.hz.employmentsite.mapper.cquery.PostCQuery;
 import com.hz.employmentsite.model.*;
 import com.hz.employmentsite.services.service.companyService.PostService;
 import com.hz.employmentsite.services.service.system.DictionaryService;
 import com.hz.employmentsite.util.StringUtils;
-import com.hz.employmentsite.vo.companyService.CompanyVo;
+import com.hz.employmentsite.vo.companyService.RecommendPostVo;
 import com.hz.employmentsite.vo.companyService.PostVo;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.SpringApplicationRunListener;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -25,12 +26,17 @@ import java.util.stream.Collectors;
 public class PostServiceImpl implements PostService {
     @Autowired
     private PostCQuery postCQuery;
+
+
     @Autowired
     private StringUtils stringUtils;
 
     @Autowired
     private PcPostMapper pcPostMapper;
 
+    @Autowired
+    private PcRecommendMapper pcRecommendMapper;
+
     @Autowired
     private PcCompanyMapper companyMapper;
 
@@ -39,12 +45,55 @@ public class PostServiceImpl implements PostService {
 
     @Override
     public PageInfo<PostVo> getList(Integer page, Integer rows, String postID, String postName, Integer minCount, Integer maxCount, String companyName, String recordStatus, String WorkName,String companyID) {
+        PageHelper.startPage(page, rows);
         List<PostVo> list = postCQuery.selectPostList(postID, postName, minCount, maxCount, companyName, recordStatus, WorkName,companyID);
         PageInfo<PostVo> result = new PageInfo(list);
         return result;
 
     }
 
+    @Override
+    public PageInfo<RecommendPostVo> getCommendPostList(Integer page, Integer rows, String jobUserID){
+        PageHelper.startPage(page, rows);
+        List<RecommendPostVo> list = postCQuery.selectRecommendPostList(jobUserID);
+        PageInfo<RecommendPostVo> result = new PageInfo(list);
+        return result;
+    }
+
+    @Override
+    public Integer saveCommendPost(RecommendPostVo data, String userId) {
+        int result = 0;
+        PcRecommend dbData = null;
+        if(data.recommendID !=null){
+            PcRecommendExample exp = new PcRecommendExample();
+            PcRecommendExample.Criteria cro = exp.createCriteria();
+            cro.andPostIDEqualTo(data.recommendID);
+            dbData = pcRecommendMapper.selectByExample(exp).stream().findFirst().orElse(null);
+        }
+        Boolean isExist = dbData != null;
+        if (!isExist) {
+            dbData = new PcRecommend();
+            dbData.setRecommendID(UUID.randomUUID().toString());
+            dbData.setJobuserID(data.jobUserID);
+            dbData.setPostID(data.postID);
+            dbData.setIsRead(data.isRead==null?false:true);
+            dbData.setIsSendnotes(data.isSendNotes==null?false:true);
+            dbData.setCreateTime(new Date());
+            dbData.setCreateUserID(userId);
+            result = pcRecommendMapper.insert(dbData);
+        } else {
+            dbData.setJobuserID(data.jobUserID);
+            dbData.setPostID(data.postID);
+            dbData.setIsRead(data.isRead==null?false:true);
+            dbData.setIsSendnotes(data.isSendNotes==null?false:true);
+            dbData.setModifyTime(new Date());
+            dbData.setModifyUserID(userId);
+            result = pcRecommendMapper.updateByPrimaryKeySelective(dbData);
+        }
+        return result;
+    }
+
+
     @Override
     public Integer save(PostVo data, String userId) {
         int result = 0;
@@ -132,10 +181,13 @@ public class PostServiceImpl implements PostService {
 
     @Override
     public PostVo getDataById(String id) {
+        List<String> ids = new ArrayList<>();
         if (stringUtils.IsNullOrEmpty(id)) {
             return null;
+        }else{
+            ids.add(id);
         }
-        return postCQuery.selectPostList(id, null, null, null, null, null, null,null).stream().findFirst().orElse(null);
+        return postCQuery.selectPostList(stringUtils.ListToInSql(ids), null, null, null, null, null, null,null).stream().findFirst().orElse(null);
     }
 
     @Override

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

@@ -78,6 +78,7 @@ public class JobHuntServiceImpl implements JobHuntService {
             dbData = new PcJobhunt();
             dbData.setJobHuntID(data.getJobHuntID());
             dbData.setJobUserID(data.getJobUserID());
+            dbData.setPostID(data.getPostID());
             dbData.setWorkCode(data.getWorkCode());
             dbData.setWorkName(data.getWorkName());
             dbData.setAreaWork(data.getAreaWork());
@@ -94,6 +95,7 @@ public class JobHuntServiceImpl implements JobHuntService {
             //修改
             dbData.setJobHuntID(data.jobHuntID);
             dbData.setJobUserID(data.jobUserID);
+            dbData.setPostID(data.postID);
             dbData.setWorkCode(data.workCode);
             dbData.setWorkName(data.workName);
             dbData.setAreaWork(data.areaWork);

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

@@ -5,7 +5,9 @@ import com.github.pagehelper.PageInfo;
 import com.hz.employmentsite.mapper.PcEducationMapper;
 import com.hz.employmentsite.mapper.PcExperienceMapper;
 import com.hz.employmentsite.mapper.PcJobuserMapper;
-import com.hz.employmentsite.mapper.cquery.JobuserCQuery;
+import com.hz.employmentsite.mapper.PcJobhuntMapper;
+import com.hz.employmentsite.mapper.PcPostMapper;
+import com.hz.employmentsite.mapper.cquery.JobUserCQuery;
 import com.hz.employmentsite.model.*;
 import com.hz.employmentsite.services.service.jobUserManager.JobUserService;
 import com.hz.employmentsite.util.StringUtils;
@@ -24,7 +26,7 @@ import java.util.UUID;
 public class JobUserServiceImpl implements JobUserService {
 
     @Autowired
-    private JobuserCQuery jobuserCQuery;
+    private JobUserCQuery jobUserCQuery;
     @Autowired
     private StringUtils stringUtils;
     @Autowired
@@ -33,12 +35,16 @@ public class JobUserServiceImpl implements JobUserService {
     private PcJobuserMapper pcJobuserMapper;
     @Autowired
     private PcExperienceMapper pcExperienceMapper;
+    @Autowired
+    private PcJobhuntMapper pcJobhuntMapper;
+    @Autowired
+    private PcPostMapper pcPostMapper;
 
     @Override
     public PageInfo<JobUserVo> getList(Integer page, Integer rows, String jobuserID, String name, String siteId, String jobStatus, Integer sexId, Integer educationTypeId, Integer emphasisTypeId) {
         PageHelper.startPage(page, rows);
 
-        List<JobUserVo> list = jobuserCQuery.selectJobuserList(jobuserID, name, siteId, jobStatus, sexId, educationTypeId, emphasisTypeId);
+        List<JobUserVo> list = jobUserCQuery.selectJobUserList(jobuserID, name, siteId, jobStatus, sexId, educationTypeId, emphasisTypeId);
 
         PageInfo<JobUserVo> result = new PageInfo(list);
 
@@ -63,7 +69,7 @@ public class JobUserServiceImpl implements JobUserService {
         if (stringUtils.IsNullOrEmpty(id)) {
             return null;
         }
-        return jobuserCQuery.selectJobuserList(id, null, null, null, null, null, null).stream().findFirst().orElse(null);
+        return jobUserCQuery.selectJobUserList(id, null, null, null, null, null, null).stream().findFirst().orElse(null);
     }
 
     @Override
@@ -84,6 +90,28 @@ public class JobUserServiceImpl implements JobUserService {
         return educationList;
     }
 
+    @Override
+    public List<PcPost> getUserHuntList(String jobuserID) {
+        PcJobhuntExample huntExp = new PcJobhuntExample();
+        PcJobhuntExample.Criteria huntCro = huntExp.or();
+        huntCro.andJobUserIDEqualTo(jobuserID);
+        List<PcJobhunt> jobHuntList = pcJobhuntMapper.selectByExample(huntExp);
+        List<String> postIDList = new ArrayList<>();
+        if (jobHuntList.size()>0){
+            jobHuntList.stream().forEach(item->{
+                postIDList.add(item.getPostID());
+            });
+            PcPostExample postExp = new PcPostExample();
+            PcPostExample.Criteria postCro = postExp.or();
+            postCro.andPostIDIn(postIDList);
+            List<PcPost> curPostList = pcPostMapper.selectByExample(postExp);
+            return curPostList;
+        }else{
+            return null;
+        }
+
+    }
+
     private int deleteEducation(List<String> ids) {
         int educationRows = 0;
         PcEducationExample expEducation = new PcEducationExample();

+ 4 - 2
src/main/java/com/hz/employmentsite/services/service/companyService/PostService.java

@@ -1,13 +1,15 @@
 package com.hz.employmentsite.services.service.companyService;
 
 import com.github.pagehelper.PageInfo;
-import com.hz.employmentsite.vo.companyService.CompanyVo;
+import com.hz.employmentsite.vo.companyService.RecommendPostVo;
 import com.hz.employmentsite.vo.companyService.PostVo;
 
 import java.util.List;
 
 public interface PostService {
-    PageInfo<PostVo> getList(Integer page, Integer rows, String postID,String postName, Integer minCount, Integer maxCount, String companyName,String RecordStatus,String WorkNmae,String companyID);
+    PageInfo<PostVo> getList(Integer page, Integer rows, String postID,String postName, Integer minCount, Integer maxCount, String companyName,String RecordStatus,String WorkName,String companyID);
+    PageInfo<RecommendPostVo> getCommendPostList(Integer page, Integer rows, String jobUserID);
+    Integer saveCommendPost(RecommendPostVo data, String userId);
     Integer save(PostVo data, String userId);
     int delete(String id);
     PostVo getDataById(String id);

+ 3 - 0
src/main/java/com/hz/employmentsite/services/service/jobUserManager/JobUserService.java

@@ -3,6 +3,7 @@ package com.hz.employmentsite.services.service.jobUserManager;
 import com.github.pagehelper.PageInfo;
 import com.hz.employmentsite.model.PcEducation;
 import com.hz.employmentsite.model.PcExperience;
+import com.hz.employmentsite.model.PcPost;
 import com.hz.employmentsite.model.SelectProps;
 import com.hz.employmentsite.vo.jobUserManager.JobUserVo;
 
@@ -19,6 +20,8 @@ public interface JobUserService {
 
     List<PcExperience> getJobUserPcExperienceList(String jobuserID);
 
+    List<PcPost> getUserHuntList(String jobuserID);
+
     int delete(List<String> ids);
 
     int save(JobUserVo data, String userId);

+ 4 - 0
src/main/java/com/hz/employmentsite/vo/companyService/PostVo.java

@@ -14,8 +14,12 @@ public class PostVo {
 
     public Integer recruitCount;
 
+    public Integer isRead;
+
     public String companyID;
 
+    public Integer insuredCount;
+
     public String postName;
 
     public Integer recordStatus;

+ 19 - 0
src/main/java/com/hz/employmentsite/vo/companyService/RecommendPostVo.java

@@ -0,0 +1,19 @@
+package com.hz.employmentsite.vo.companyService;
+
+import java.util.Date;
+
+public class RecommendPostVo {
+    public String recommendID;
+    public String jobUserID;
+    public String postID;
+    public String  postName;
+    public Boolean isRead;
+    public Boolean isSendNotes;
+    public Integer recruitCount;
+    public String  companyName;
+    public Integer insuredCount;
+    public String createUserID;
+    public Date createTime;
+    public String modifyUserID;
+    public Date modifyTime;
+}

+ 2 - 0
src/main/java/com/hz/employmentsite/vo/jobUserManager/JobHuntVo.java

@@ -9,6 +9,7 @@ public class JobHuntVo {
 
     public String jobHuntID;
     public String jobUserID;
+    public String postID;
     public String jobUserName;
     public String workCode;
     public String workName;
@@ -20,6 +21,7 @@ public class JobHuntVo {
 
     public String jobHuntTypeStr;
     public String jobUserTypeStr;
+    public String postName;
     public BigDecimal minSalary;
     public BigDecimal maxSalary;
     public Boolean isAccomplish;

+ 2 - 3
src/main/java/com/hz/employmentsite/vo/jobUserManager/JobUserVo.java

@@ -73,11 +73,8 @@ public class JobUserVo {
     private String personalSkills;
 
     private String createUserID;
-
     private Date createTime;
-
     private String modifyUserID;
-
     private Date modifyTime;
 
     public String genderName;
@@ -87,4 +84,6 @@ public class JobUserVo {
     public String keyTypeName;
     public List<HashMap<String,Object>> jobEducation;
     public List<HashMap<String,Object>> jobExperience;
+    /*已推荐岗位个数*/
+    public Integer recommendedCount;
 }

+ 10 - 46
src/main/java/com/hz/employmentsite/vo/user/UserInfoModel.java

@@ -6,59 +6,23 @@ import java.util.Date;
 
 @Data
 public class UserInfoModel {
-    public String userId;
 
+    public String loginID;
+    public String userID;
     public String name;
-
-    public String loginId;
-
+    public String passWord;
+    public Integer userTypeID;
+    public String userTypeName;
     public Integer recordStatus;
 
-    public Date createTime;
+    public String siteUserName;
+    public Integer gender;
+    public String genderName;
+    public String userMobile;
 
+    public Date createTime;
     public String createBy;
-
     public Date updateTime;
-
     public String updateBy;
 
-    public String userTypeId;
-
-    public String studentID;
-
-    public String teacherID;
-
-    public String userName;
-
-    public String userCode;
-
-    public String birthday;
-
-    public String IDNo;
-
-    public Integer genderID;
-
-    public Integer studentTypeID;
-
-    public String studentTypeName;
-
-    public String titleName;
-
-    public String genderName;
-
-    public String collegeName;
-
-    public String majorGradeName;
-
-    public String majorClassName;
-
-    public String collegeID;
-
-    public String majorGradeID;
-
-    public String majorClassID;
-
-    public String key;
-
-    public String practiceBaseID;
 }

+ 28 - 13
src/main/resources/mapping/PcJobhuntMapper.xml

@@ -4,6 +4,7 @@
   <resultMap id="BaseResultMap" type="com.hz.employmentsite.model.PcJobhunt">
     <id column="JobHuntID" jdbcType="VARCHAR" property="jobHuntID" />
     <result column="JobUserID" jdbcType="VARCHAR" property="jobUserID" />
+    <result column="PostID" jdbcType="VARCHAR" property="postID" />
     <result column="WorkCode" jdbcType="VARCHAR" property="workCode" />
     <result column="WorkName" jdbcType="VARCHAR" property="workName" />
     <result column="AreaWork" jdbcType="VARCHAR" property="areaWork" />
@@ -77,7 +78,7 @@
     </where>
   </sql>
   <sql id="Base_Column_List">
-    JobHuntID, JobUserID, WorkCode, WorkName, AreaWork, InDate, WorkYear, JobHuntType, 
+    JobHuntID, JobUserID, PostID, WorkCode, WorkName, AreaWork, InDate, WorkYear, JobHuntType, 
     JobUserType, MinSalary, MaxSalary, CreateUserID, CreateTime, ModifyUserID, ModifyTime
   </sql>
   <select id="selectByExample" parameterType="com.hz.employmentsite.model.PcJobhuntExample" resultMap="BaseResultMap">
@@ -111,18 +112,18 @@
     </if>
   </delete>
   <insert id="insert" parameterType="com.hz.employmentsite.model.PcJobhunt">
-    insert into pc_jobhunt (JobHuntID, JobUserID, WorkCode, 
-      WorkName, AreaWork, InDate, 
-      WorkYear, JobHuntType, JobUserType, 
-      MinSalary, MaxSalary, CreateUserID, 
-      CreateTime, ModifyUserID, ModifyTime
-      )
-    values (#{jobHuntID,jdbcType=VARCHAR}, #{jobUserID,jdbcType=VARCHAR}, #{workCode,jdbcType=VARCHAR}, 
-      #{workName,jdbcType=VARCHAR}, #{areaWork,jdbcType=VARCHAR}, #{inDate,jdbcType=TIMESTAMP}, 
-      #{workYear,jdbcType=INTEGER}, #{jobHuntType,jdbcType=INTEGER}, #{jobUserType,jdbcType=INTEGER}, 
-      #{minSalary,jdbcType=DECIMAL}, #{maxSalary,jdbcType=DECIMAL}, #{createUserID,jdbcType=VARCHAR}, 
-      #{createTime,jdbcType=TIMESTAMP}, #{modifyUserID,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP}
-      )
+    insert into pc_jobhunt (JobHuntID, JobUserID, PostID, 
+      WorkCode, WorkName, AreaWork, 
+      InDate, WorkYear, JobHuntType, 
+      JobUserType, MinSalary, MaxSalary, 
+      CreateUserID, CreateTime, ModifyUserID, 
+      ModifyTime)
+    values (#{jobHuntID,jdbcType=VARCHAR}, #{jobUserID,jdbcType=VARCHAR}, #{postID,jdbcType=VARCHAR}, 
+      #{workCode,jdbcType=VARCHAR}, #{workName,jdbcType=VARCHAR}, #{areaWork,jdbcType=VARCHAR}, 
+      #{inDate,jdbcType=TIMESTAMP}, #{workYear,jdbcType=INTEGER}, #{jobHuntType,jdbcType=INTEGER}, 
+      #{jobUserType,jdbcType=INTEGER}, #{minSalary,jdbcType=DECIMAL}, #{maxSalary,jdbcType=DECIMAL}, 
+      #{createUserID,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{modifyUserID,jdbcType=VARCHAR}, 
+      #{modifyTime,jdbcType=TIMESTAMP})
   </insert>
   <insert id="insertSelective" parameterType="com.hz.employmentsite.model.PcJobhunt">
     insert into pc_jobhunt
@@ -133,6 +134,9 @@
       <if test="jobUserID != null">
         JobUserID,
       </if>
+      <if test="postID != null">
+        PostID,
+      </if>
       <if test="workCode != null">
         WorkCode,
       </if>
@@ -180,6 +184,9 @@
       <if test="jobUserID != null">
         #{jobUserID,jdbcType=VARCHAR},
       </if>
+      <if test="postID != null">
+        #{postID,jdbcType=VARCHAR},
+      </if>
       <if test="workCode != null">
         #{workCode,jdbcType=VARCHAR},
       </if>
@@ -236,6 +243,9 @@
       <if test="row.jobUserID != null">
         JobUserID = #{row.jobUserID,jdbcType=VARCHAR},
       </if>
+      <if test="row.postID != null">
+        PostID = #{row.postID,jdbcType=VARCHAR},
+      </if>
       <if test="row.workCode != null">
         WorkCode = #{row.workCode,jdbcType=VARCHAR},
       </if>
@@ -284,6 +294,7 @@
     update pc_jobhunt
     set JobHuntID = #{row.jobHuntID,jdbcType=VARCHAR},
       JobUserID = #{row.jobUserID,jdbcType=VARCHAR},
+      PostID = #{row.postID,jdbcType=VARCHAR},
       WorkCode = #{row.workCode,jdbcType=VARCHAR},
       WorkName = #{row.workName,jdbcType=VARCHAR},
       AreaWork = #{row.areaWork,jdbcType=VARCHAR},
@@ -307,6 +318,9 @@
       <if test="jobUserID != null">
         JobUserID = #{jobUserID,jdbcType=VARCHAR},
       </if>
+      <if test="postID != null">
+        PostID = #{postID,jdbcType=VARCHAR},
+      </if>
       <if test="workCode != null">
         WorkCode = #{workCode,jdbcType=VARCHAR},
       </if>
@@ -352,6 +366,7 @@
   <update id="updateByPrimaryKey" parameterType="com.hz.employmentsite.model.PcJobhunt">
     update pc_jobhunt
     set JobUserID = #{jobUserID,jdbcType=VARCHAR},
+      PostID = #{postID,jdbcType=VARCHAR},
       WorkCode = #{workCode,jdbcType=VARCHAR},
       WorkName = #{workName,jdbcType=VARCHAR},
       AreaWork = #{areaWork,jdbcType=VARCHAR},

+ 2 - 1
src/main/resources/mapping/cquery/JobhuntCQuery.xml

@@ -2,8 +2,9 @@
 <!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.*,jobUser.name as JobUserName,dic_jobUserType.Name as jobUserTypeStr,dic_huntJobType.Name as jobHuntTypeStr from pc_jobhunt jobHunt
+        select jobHunt.*,jobUser.name as JobUserName,dic_jobUserType.Name as jobUserTypeStr,dic_huntJobType.Name as jobHuntTypeStr,post.PostName from pc_jobhunt jobHunt
         left join pc_jobuser jobUser on jobHunt.JobUserID = jobUser.JobUserID
+        left join pc_post post on jobHunt.postID = post.postID
         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

+ 9 - 19
src/main/resources/mapping/cquery/JobuserCQuery.xml

@@ -1,24 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!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.JobuserCQuery">
-    <select id="selectJobuserList" resultType="com.hz.employmentsite.vo.jobUserManager.JobUserVo">
-
-        select gender.name as GenderName,culture.name as CultureName,site.SiteName,jobstatus.name as JobStatusName
-        ,keytype.name as KeyTypeName,jobuser.* 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'
-
-        left join sys_dictionary_item jobstatus
-        on jobuser.JobStatusID = jobstatus.value and jobstatus.DictionaryCode='JobStatus'
-
-        left join sys_dictionary_item keytype
-        on jobuser.KeyPersonTypeID = keytype.value and keytype.DictionaryCode='KeyPersonType'
+<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
+        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'
+        left join sys_dictionary_item jobstatus on jobuser.JobStatusID = jobstatus.value and jobstatus.DictionaryCode='JobStatus'
+        left join sys_dictionary_item keytype on jobuser.KeyPersonTypeID = keytype.value and keytype.DictionaryCode='KeyPersonType'
         where 1=1
         <if test="jobuserID != '' and jobuserID != null">
             and jobuser.jobuserID = #{jobuserID}

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

@@ -2,14 +2,14 @@
 <!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.PostCQuery">
     <select id="selectPostList" resultType="com.hz.employmentsite.vo.companyService.PostVo">
-        select post.*,company.CompanyName,item.`Name` as cultureLevelName from pc_post post
+        select post.*,company.CompanyName,company.insuredCount,item.`Name` as cultureLevelName from pc_post post
         left join pc_company company
         on post.CompanyID = company.CompanyID
         left join sys_dictionary_item item
         on item.value=post.CultureRank and item.DictionaryCode='CultureLevel'
         where 1=1
         <if test="postID != '' and postID != null">
-            and post.postID = #{postID}
+            and post.postID in (${postID})
         </if>
         <if test="postName != '' and postName != null">
             and post.postName like Concat('%',#{postName},'%')
@@ -34,4 +34,12 @@
         </if>
 
     </select>
+    <select id="selectRecommendPostList" resultType="com.hz.employmentsite.vo.companyService.RecommendPostVo">
+        select post.*,recommend.recommendID,jobhunt.JobUserID,recommend.isRead,recommend.isSendNotes,company.CompanyName,company.InsuredCount  from
+            (select * from pc_post where PostID in (select PostID from pc_jobhunt where JobUserID= #{jobUserID})) post
+                left join pc_company company on post.CompanyID = company.CompanyID
+                left join (select * from pc_recommend where JobUserID= #{jobUserID}) recommend on post.PostID = recommend.PostID
+                left join pc_jobhunt jobhunt on post.PostID = jobhunt.PostID
+        where jobhunt.JobUserID = #{jobUserID}
+    </select>
 </mapper>

+ 8 - 5
src/main/resources/mapping/cquery/SysUserCQuery.xml

@@ -53,11 +53,14 @@
     </select>
 
     <select id="selectUserInfo" resultType="com.hz.employmentsite.vo.user.UserInfoModel">
-        select us.userId,us.name,us.loginID
-             ,us.userTypeID
-        from sys_user us
-
-       where us.userId = #{userId}
+        select theUser.*,dic_userType.Name as UserTypeName,siteUser.SiteUserName,siteUser.Mobile as UserMobile,
+               siteUser.Gender,dic_genderType.Name as GenderName from sys_user theUser
+        left join pc_site_user siteUser on theUser.UserID = siteUser.UserID
+        left join (select * from sys_dictionary_item where DictionaryCode ='UserType') dic_userType
+        on theUser.UserTypeID = dic_userType.value
+        left join (select * from sys_dictionary_item where DictionaryCode ='Gender') dic_genderType
+        on siteUser.Gender = dic_genderType.value
+        where theUser.UserId = #{userId}
     </select>
 
     <select id="selectUserMenuList" resultType="com.hz.employmentsite.model.SysMenu">

+ 1 - 1
vue/src/api/companyService/post.ts

@@ -40,7 +40,7 @@ export function del(id: any) {
   return request<object>(
     {
       url: "companyService/post/delete",
-      method: 'get',
+      method: 'post',
       params: {id}
     },
     {

+ 21 - 7
vue/src/views/jobUserManager/jobhunt/edit.vue

@@ -25,9 +25,6 @@
           <a-form-item label="工种名称" name="workName" :label-col="{span:7}" :rules="[{ required: true, message: '请选择工种类型!' }]">
             <label v-if="opCategory==3">{{dataModel.workName}}</label>
             <a-input  v-model:value="dataModel.workName" placeholder=""/>
-            <!--<a-select  ref="select"  v-model:value="dataModel.workCode" :options="jobWorkTypeList"
-                       :field-names="{label:'name',value:'value'}"  @change="loadData"  :allow-clear="true"  >
-            </a-select>-->
           </a-form-item>
         </a-col>
         <a-col :span="9">
@@ -57,9 +54,11 @@
           </a-form-item>
         </a-col>
         <a-col :span="9">
-          <a-form-item label="工作年限"  name="workYear" :label-col="{span:7}" :rules="[{ required: true, message: '请输入工作年限!' }]">
-            <label v-if="opCategory==3">{{dataModel.workYear}}</label>
-            <a-input type="number" v-model:value="dataModel.workYear" placeholder=""/>
+          <a-form-item label="求职岗位"  name="postID" :label-col="{span:7}" :rules="[{ required: true, message: '请选择求职岗位!' }]">
+            <label v-if="opCategory==3">{{dataModel.postID}}</label>
+            <a-select  ref="select"  v-model:value="dataModel.postID" :options="allPostList"
+                       :field-names="{label:'postName',value:'postID'}"  @change="loadData"  :allow-clear="true"  >
+            </a-select>
           </a-form-item>
         </a-col>
       </a-row>
@@ -76,7 +75,12 @@
             <a-date-picker v-model:value="dataModel.inDate"  picker="date" value-format="YYYY-MM-DD"  />
           </a-form-item>
         </a-col>
-        <a-col :span="9"></a-col>
+        <a-col :span="9">
+          <a-form-item label="工作年限"  name="workYear" :label-col="{span:7}" :rules="[{ required: true, message: '请输入工作年限!' }]">
+            <label v-if="opCategory==3">{{dataModel.workYear}}</label>
+            <a-input type="number" v-model:value="dataModel.workYear" placeholder=""/>
+          </a-form-item>
+        </a-col>
       </a-row>
       <a-divider orientation="left">其他信息</a-divider>
       <a-row>
@@ -90,6 +94,7 @@
 import {defineComponent, reactive, ref, toRefs} from "vue";
 import {getJobHuntByID,saveJobHunt} from "@/api/jobUserManager/jobhunt"
 import {getJobUserDataList} from "@/api/jobUserManager/jobuser";
+import {getList} from "@/api/companyService/post";
 import {getSysDictionaryList} from '@/api/system/dictionary';
 import BUploadFile from "@/components/file/uploadFile.vue";
 import {message,SelectProps} from "ant-design-vue";
@@ -118,11 +123,18 @@ export default defineComponent({
       selectedRowKeys: [],
       loading: false
     });
+    const allPostList = ref([]);
     const jobUserList = ref<SelectProps['options']>();
     const jobWorkTypeList =  ref<SelectProps['options']>();
     const jobHuntTypeList =  ref<SelectProps['options']>();
     const jobUserTypeList =  ref<SelectProps['options']>();
 
+    const getAllPostList = async function() {
+      const allPostResult :any = await getList({pageIndex:1,pageSize:10000});
+      console.log('jobUserResult',allPostResult.list);
+      allPostList.value = allPostResult.list;
+    }
+
     const getJobUserList = async function() {
       const jobUserResult :any = await getJobUserDataList();
       console.log('jobUserResult',jobUserResult);
@@ -152,6 +164,7 @@ export default defineComponent({
     const show = (id: any,method:string,category:any) => {
       title.value ="求职意向管理-"+method;
       opCategory.value = category;
+      getAllPostList();
       getJobUserTypeList();
       getJobHuntTypeList();
       getJobWorkTypeList();
@@ -190,6 +203,7 @@ export default defineComponent({
       visible,
       formState,
       opCategory,
+      allPostList,
       jobUserList,
       jobUserTypeList,
       jobHuntTypeList,

+ 1 - 0
vue/src/views/jobUserManager/jobhunt/index.vue

@@ -179,6 +179,7 @@ import type {ImportProps} from "@/components/basic/excel/importExcel/ImportProps
           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: 'postName', key: 'postName', align: "center", },
         { title: '人才类型', dataIndex: 'jobUserTypeStr', key: 'jobUserTypeStr' , align: "center",},
         { title: '月薪要求', dataIndex: 'salary', key: 'salary' , align: "center",
           customRender: ({record}) => (