Browse Source

app-企业岗位编辑添加【工种】信息

liao-sea 11 months ago
parent
commit
704cbb9283

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

@@ -91,6 +91,19 @@ export function getProfessionLevelList() {
     );
 }
 
+export function getWorkCategoryLevelList() {
+    return request<object>(
+        {
+            url: "jobusermgr/recommendmgt/getWorkCategoryLevelList",
+            method: 'get',
+            params: null,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
 export function getProfessionLikeList(params: any) {
     return request<any>(
         {

+ 303 - 0
h5app/src/components/workCategorySelection.vue

@@ -0,0 +1,303 @@
+<template>
+  <ion-button id="open-modal" style="color: #02a6f1;font-size: 15px;" fill="clear" @click="loadWorkCategoryInfo">选择
+  </ion-button>
+  <ion-page >
+    <ion-content class="ion-padding">
+      <ion-modal class="cascade-model" trigger="open-modal" :backdrop-dismiss="false" @willPresent="onRest()" :is-open="isOpen" :initial-breakpoint="1"
+                 :breakpoints="[0, 1]">
+        <ion-toolbar>
+          <ion-item>
+            <ion-buttons slot="start">
+              <ion-button fill="clear" @click="onCancel">取消</ion-button>
+            </ion-buttons>
+            <ion-label style="font-size: 12px;white-space: pre-wrap; word-wrap: break-word;">
+              {{ selectWorkCategoryInfo.text }}
+            </ion-label>
+            <ion-buttons slot="end">
+              <ion-button fill="clear" :disabled="selectWorkCategoryInfo.value==''" @click="onConfirm">确定</ion-button>
+            </ion-buttons>
+          </ion-item>
+          <ion-item>
+            <ion-segment value="0">
+              <ion-segment-button v-for="(item,key) in selectModelList" :key="key" @click="onSelectType(item.index)"
+                                  :disabled="item.disabled" :value="item.index">
+                <ion-label :style="{color:item.isSelect?'#1a65eb':'#000000'}">{{ item.name }}</ion-label>
+              </ion-segment-button>
+            </ion-segment>
+          </ion-item>
+        </ion-toolbar>
+        <div class="bw-vue-list">
+          <div class="list-content">
+            <ion-list class="custom-scroll" v-show="selectModelList[selectType.one].isSelect">
+              <ion-item v-for="(item, index) in selectModelList[selectType.one].workCategoryList" :key="index">
+                <ion-label :style="{color:item.isSelect?'#1a65eb':'#000000'}"
+                           @click="onSelect(item,selectType.one)">
+                  {{ item.workCategoryName }}
+                </ion-label>
+              </ion-item>
+            </ion-list>
+            <ion-list class="custom-scroll" v-show="selectModelList[selectType.two].isSelect">
+              <ion-item v-for="(item, index) in selectModelList[selectType.two].workCategoryList" :key="index">
+                <ion-label :style="{color:item.isSelect?'#1a65eb':'#000000'}"
+                           @click="onSelect(item,selectType.two)">
+                  {{ item.workCategoryName }}
+                </ion-label>
+              </ion-item>
+            </ion-list>
+            <ion-list class="custom-scroll" v-show="selectModelList[selectType.three].isSelect">
+              <ion-item v-for="(item, index) in selectModelList[selectType.three].workCategoryList" :key="index">
+                <ion-label :style="{color:item.isSelect?'#1a65eb':'#000000'}"
+                           @click="onSelect(item,selectType.three)">
+                  {{ item.workCategoryName }}
+                </ion-label>
+              </ion-item>
+            </ion-list>
+          </div>
+        </div>
+      </ion-modal>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+import {defineComponent, reactive, ref} from 'vue';
+import {getWorkCategoryLevelList} from "@/api/recommendmgt";
+
+export default defineComponent({
+  name: "workCategorySelection",
+  props: {
+    WorkCategoryID: {type: String, default: ''},
+  },
+  setup(props, context) {
+    const selectType = {
+      one: 0,
+      two: 1,
+      three: 2
+    }
+    const isOpen = ref(false);
+    const selectModelList = reactive([
+      {
+        index: 0,
+        name: '分类一',
+        isSelect: false,
+        disabled: true,
+        workCategoryName: '',
+        workCategoryID: '',
+        workCategoryList: [] as any
+      },
+      {
+        index: 1,
+        name: '分类二',
+        isSelect: false,
+        disabled: true,
+        workCategoryName: '',
+        workCategoryID: '',
+        workCategoryList: [] as any
+      },
+      {
+        index: 2,
+        name: '工种',
+        isSelect: false,
+        disabled: true,
+        workCategoryName: '',
+        workCategoryID: '',
+        workCategoryList: [] as any
+      }]);
+    const selectWorkCategoryInfo = reactive({value: '', text: ''})
+    const workCategoryLevelList = ref();
+
+    const loadWorkCategoryInfo = () => {
+      getWorkCategoryLevelList().then(data => {
+        workCategoryLevelList.value = data;
+        console.log("工种",workCategoryLevelList.value);
+        if (!props.WorkCategoryID) {
+          selectModelList[selectType.one].isSelect = true;
+          selectModelList[selectType.one].disabled = false;
+          selectModelList[selectType.one].workCategoryName = '';
+          selectModelList[selectType.one].workCategoryID = '';
+          selectModelList[selectType.one].workCategoryList = workCategoryLevelList.value.filter((x: any) => x.workCategoryLevel == "1")
+              .map((x: any) => ({
+                ...x,
+                isSelect: false
+              }));
+        } else {
+
+          const threeInfo = workCategoryLevelList.value.find((x: any) => x.workCategoryLevel == "3" && x.workCategoryID == props.WorkCategoryID);
+          const twoInfo = workCategoryLevelList.value.find((x: any) => x.workCategoryLevel == "2" && x.workCategoryID == threeInfo.parentWorkCategoryID);
+          const oneInfo = workCategoryLevelList.value.find((x: any) => x.workCategoryLevel == "1" && x.workCategoryID == twoInfo.parentWorkCategoryID);
+
+          selectModelList[selectType.one].isSelect = false;
+          selectModelList[selectType.one].disabled = false;
+          selectModelList[selectType.one].workCategoryName = oneInfo.workCategoryName;
+          selectModelList[selectType.one].workCategoryID = oneInfo.workCategoryID;
+          selectModelList[selectType.one].workCategoryList = workCategoryLevelList.value.filter((x: any) => x.workCategoryLevel == "1")
+              .map((x: any) => ({
+                ...x,
+                isSelect: false
+              }));
+          selectModelList[selectType.one].workCategoryList.find((x: any) => x.workCategoryID == oneInfo.workCategoryID).isSelect = true;
+
+          selectModelList[selectType.two].isSelect = false;
+          selectModelList[selectType.two].disabled = false;
+          selectModelList[selectType.two].workCategoryName = twoInfo.workCategoryName;
+          selectModelList[selectType.two].workCategoryID = twoInfo.workCategoryID;
+          selectModelList[selectType.two].workCategoryList = workCategoryLevelList.value.filter((x: any) => x.workCategoryLevel == "2"
+              && x.parentWorkCategoryID == oneInfo.workCategoryID).map((x: any) => ({
+            ...x,
+            isSelect: false
+          }));
+          selectModelList[selectType.two].workCategoryList.find((x: any) => x.workCategoryID == twoInfo.workCategoryID).isSelect = true;
+
+          selectModelList[selectType.three].isSelect = true;
+          selectModelList[selectType.three].disabled = false;
+          selectModelList[selectType.three].workCategoryName = threeInfo.workCategoryName;
+          selectModelList[selectType.three].workCategoryID = threeInfo.workCategoryID;
+          selectModelList[selectType.three].workCategoryList = workCategoryLevelList.value.filter((x: any) => x.workCategoryLevel == "3"
+              && x.parentWorkCategoryID == twoInfo.workCategoryID).map((x: any) => ({
+            ...x,
+            isSelect: false
+          }));
+          selectModelList[selectType.three].workCategoryList.find((x: any) => x.workCategoryID == threeInfo.workCategoryID).isSelect = true;
+
+          getSelectProsession();
+        }
+      });
+      isOpen.value = true;
+    }
+
+    const onSelectType = (type: number) => {
+      if (selectType.one == type) {
+        selectModelList.map(x => {
+          x.isSelect = false,
+          x.disabled = true,
+          x.workCategoryName = '',
+          x.workCategoryID = '',
+          x.workCategoryList = []
+        });
+
+        selectModelList[selectType.one].isSelect = true;
+        selectModelList[selectType.one].disabled = false;
+        selectModelList[selectType.one].workCategoryList = workCategoryLevelList.value.filter((x: any) => x.workCategoryLevel == "1")
+            .map((x: any) => ({
+              ...x,
+              isSelect: false
+            }));
+      }
+
+      if (selectType.two == type) {
+        selectModelList[selectType.one].isSelect = false;
+        selectModelList[selectType.three].isSelect = false;
+        selectModelList[selectType.three].workCategoryName = '';
+        selectModelList[selectType.three].workCategoryID = '';
+        selectModelList[selectType.three].workCategoryList = [];
+
+        selectModelList[selectType.two].isSelect = true;
+        selectModelList[selectType.two].disabled = false;
+        selectModelList[selectType.two].workCategoryName = '';
+        selectModelList[selectType.two].workCategoryID = '';
+        selectModelList[selectType.two].workCategoryList = workCategoryLevelList.value.filter((x: any) => x.workCategoryLevel == "2"
+            && x.parentWorkCategoryID == selectModelList[selectType.one].workCategoryID).map((x: any) => ({
+          ...x,
+          isSelect: false
+        }));
+      }
+
+      if (selectType.three == type) {
+        selectModelList[selectType.one].isSelect = false;
+        selectModelList[selectType.two].isSelect = false;
+
+        selectModelList[selectType.three].isSelect = true;
+        selectModelList[selectType.three].disabled = false;
+        selectModelList[selectType.three].workCategoryName = '';
+        selectModelList[selectType.three].workCategoryID = '';
+        selectModelList[selectType.three].workCategoryList = workCategoryLevelList.value.filter((x: any) => x.workCategoryLevel == "3"
+            && x.parentWorkCategoryID == selectModelList[selectType.two].workCategoryID).map((x: any) => ({
+          ...x,
+          isSelect: false
+        }));
+      }
+
+      getSelectProsession();
+    }
+
+    const onSelect = (item: any, type: any) => {
+      selectModelList[type].workCategoryList.forEach((x: any) => {
+        x.isSelect = x.workCategoryID == item.workCategoryID
+      });
+      selectModelList[type].workCategoryName = item.workCategoryName;
+      selectModelList[type].workCategoryID = item.workCategoryID;
+
+      if (type == selectType.one) {
+        onSelectType(selectType.two);
+      }else if (type == selectType.two) {
+        onSelectType(selectType.three);
+      }else{
+        getSelectProsession();
+      }
+
+    }
+
+    const getSelectProsession = () => {
+      selectWorkCategoryInfo.text = selectModelList.filter(x => x.workCategoryName != '').map(x => x.workCategoryName).join("-");
+      selectWorkCategoryInfo.value = selectModelList[selectType.three].workCategoryID;
+    }
+
+    const onCancel = () => {
+      isOpen.value = false;
+    }
+
+    const onConfirm = () => {
+      isOpen.value = false;
+      context.emit("SetWorkCategoryID", selectWorkCategoryInfo);
+    }
+
+    const onRest = () => {
+      selectModelList.splice(0,1,
+        {
+          index: 0,
+          name: '分类一',
+          isSelect: false,
+          disabled: true,
+          workCategoryName: '',
+          workCategoryID: '',
+          workCategoryList: [] as any
+        });
+      selectModelList.splice(1,1,{
+          index: 1,
+          name: '分类二',
+          isSelect: false,
+          disabled: true,
+          workCategoryName: '',
+          workCategoryID: '',
+          workCategoryList: [] as any
+        });
+
+      selectModelList.splice(2,1,  {
+          index: 2,
+          name: '岗位',
+          isSelect: false,
+          disabled: true,
+          workCategoryName: '',
+          workCategoryID: '',
+          workCategoryList: [] as any
+        });
+      selectWorkCategoryInfo.value = '';
+      selectWorkCategoryInfo.text = '';
+      workCategoryLevelList.value = [];
+    }
+
+    return {
+      isOpen,
+      selectType,
+      selectModelList,
+      selectWorkCategoryInfo,
+      loadWorkCategoryInfo,
+      onSelectType,
+      onSelect,
+      onCancel,
+      onConfirm,
+      onRest
+    };
+  }
+})
+</script>

+ 27 - 1
h5app/src/views/pages/company/editPost.vue

@@ -27,6 +27,19 @@
             <ion-note v-show="isCommit&&v$.dataModel.professionName.$error" class="danger" >请选择岗位</ion-note>
           </div>
           <div style="width: 100%;overflow: hidden;"></div>
+          <div class="form-input">
+            <ion-label>工种名称<span class="danger">*</span></ion-label>
+            <div>
+              <ion-input placeholder="请选择工种" label-placement="stacked" style="float: left;width:78%;"
+                         v-model="dataModel.workCategoryName" class="custom" readonly >
+              </ion-input>
+              <ion-item style="width:22%;float: right;padding:0px;margin: 0px;">
+                <work-category-selection  :WorkCategoryID="dataModel.workCode" @SetWorkCategoryID="onSetWorkCategoryID"></work-category-selection>
+              </ion-item>
+            </div>
+            <ion-note v-show="isCommit&&v$.dataModel.workCategoryName.$error" class="danger" >请选择工种</ion-note>
+          </div>
+          <div style="width: 100%;overflow: hidden;"></div>
           <div class="form-input">
             <ion-label>招聘数量(人)<span class="danger">*</span></ion-label>
             <ion-input placeholder="请输入招聘数量" label-placement="stacked" :clear-input="true"
@@ -198,6 +211,7 @@ import {required} from "@vuelidate/validators";
 import {getSysDictionaryList} from "@/api/system/dictionary";
 import dayjs from "dayjs";
 import PostSelectionLike from "@/components/postSelectionLike.vue";
+import WorkCategorySelection from "@/components/workCategorySelection.vue";
 import {useUserStore} from "@/store/modules/user";
 
 interface postModel {
@@ -206,7 +220,7 @@ interface postModel {
 
 export default defineComponent({
   name: 'PostEdit',
-  components:{PostSelectionLike},
+  components:{PostSelectionLike,WorkCategorySelection},
   setup() {
     const router = useRouter();
     const route = useRoute();
@@ -220,6 +234,9 @@ export default defineComponent({
         professionName:null,
         professionID:null,
         postName:null,
+        workCategoryName:null,
+        workCode:null,
+        workName:null,
         recruitCount:null,
         startTime:dayjs().format("YYYY-MM-DD"),
         endTime:dayjs().format("YYYY-MM-DD"),
@@ -244,6 +261,7 @@ export default defineComponent({
       return {
         dataModel: {
           professionName: {required},
+          workCategoryName: {required},
           recruitCount: {required},
           startTime: {required},
           endTime: {required},
@@ -277,6 +295,13 @@ export default defineComponent({
       formState.dataModel.professionID = data.value;
       formState.dataModel.professionName = data.text;
     }
+
+    const onSetWorkCategoryID = (data: any)=>{
+      formState.dataModel.workCode = data.value;
+      formState.dataModel.workCategoryName = data.text;
+    }
+
+
     const onSave = async function (){
       isCommit.value = true;
       const isFormCorrect = await v$.value.$validate();
@@ -463,6 +488,7 @@ export default defineComponent({
       onResultInfo,
       recruitCountBlur,
       onIsTrailChange,
+      onSetWorkCategoryID,
       onSetProfessionID,
       onSave,
       back,

+ 28 - 3
h5app/src/views/pages/jobUserInfo/postEdit.vue

@@ -26,6 +26,19 @@
               </ion-item>
             </div>
 <!--            <ion-note v-show="isCommit&&v$.dataModel.professionID.$error" class="danger" >请选择岗位</ion-note>-->
+          </div>
+          <div style="width: 100%;overflow: hidden;"></div>
+          <div class="form-input">
+            <ion-label>工种名称<span class="danger">*</span></ion-label>
+            <div>
+              <ion-input placeholder="请选择工种" label-placement="stacked" style="float: left;width:78%;"
+                         v-model="dataModel.workCategoryName" class="custom" readonly >
+              </ion-input>
+              <ion-item style="width:22%;float: right;padding:0px;margin: 0px;">
+                <work-category-selection  :WorkCategoryID="dataModel.workCode" @SetWorkCategoryID="onSetWorkCategoryID"></work-category-selection>
+              </ion-item>
+            </div>
+<!--            <ion-note slot="error" >请选择工种</ion-note>-->
           </div>
           <div style="width: 100%;overflow: hidden;"></div>
           <div class="form-input">
@@ -194,11 +207,12 @@ import {useRoute, useRouter} from "vue-router";
 import {alertController, onIonViewDidEnter} from "@ionic/vue";
 import {useVuelidate} from "@vuelidate/core";
 import {getPostByID,savePost} from "@/api/post";
+import {getCompanyById} from "@/api/company";
 import {required} from "@vuelidate/validators";
 import {getSysDictionaryList} from "@/api/system/dictionary";
 import dayjs from "dayjs";
 import PostSelectionLike from "@/components/postSelectionLike.vue";
-import {getCompanyById} from "@/api/company";
+import WorkCategorySelection from "@/components/workCategorySelection.vue";
 
 interface StepParams{
   loginUserID: string,
@@ -206,9 +220,8 @@ interface StepParams{
 
 export default defineComponent({
   name: 'PostEdit',
-  components:{PostSelectionLike},
+  components:{PostSelectionLike,WorkCategorySelection},
   setup() {
-    const refPostSelectionLike = ref();
     const router = useRouter();
     const route = useRoute();
     const isShow = ref<any>(false);
@@ -220,6 +233,9 @@ export default defineComponent({
         professionName:null,
         professionID:null,
         postName:null,
+        workCategoryName:null,
+        workCode:null,
+        workName:null,
         recruitCount:null,
         startTime:dayjs().format("YYYY-MM-DD"),
         endTime:dayjs().format("YYYY-MM-DD"),
@@ -245,6 +261,7 @@ export default defineComponent({
       return {
         dataModel: {
           professionName: {required},
+          workCategoryName: {required},
           recruitCount: {required},
           startTime: {required},
           endTime: {required},
@@ -260,6 +277,8 @@ export default defineComponent({
     const workYearList = ref([]);
     const cultureRankList = ref([]);
     const workNatureList = ref([]);
+    const refPostSelectionLike = ref();
+
     const curStepData = ref<StepParams>({
       loginUserID:""
     });
@@ -279,6 +298,11 @@ export default defineComponent({
       formState.dataModel.professionName = data.text;
     }
 
+    const onSetWorkCategoryID = (data: any)=>{
+      formState.dataModel.workCode = data.value;
+      formState.dataModel.workCategoryName = data.text;
+    }
+
     function isStringInteger(value: string) {
       const n = parseInt(value, 10);
       return n.toString() === value && Number.isInteger(n);
@@ -456,6 +480,7 @@ export default defineComponent({
       onOpenPost,
       onResultInfo,
       recruitCountBlur,
+      onSetWorkCategoryID,
       onSetProfessionID,
       onSave,
       back,

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

@@ -84,6 +84,13 @@ public class RecommendMgtController {
         return RespGenerstor.success(result);
     }
 
+    @ResponseBody
+    @GetMapping("/getWorkCategoryLevelList")
+    public BaseResponse getWorkCategoryLevelList() {
+        List<WorkCategoryLevel> result = recommendMgtService.getWorkCategoryLevelList();
+        return RespGenerstor.success(result);
+    }
+
     @ResponseBody
     @GetMapping("/getProfessionLikeList")
     public BaseResponse getProfessionLikeList(@RequestParam("pageIndex") int pageIndex, @RequestParam("pageSize") int pageSize,

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

@@ -62,6 +62,8 @@ public interface RecommendMgtCQuery {
 
     List<ProfessionLevel> getProfessionLikeList(@Param("professionName") String professionName);
 
+    List<WorkCategoryLevel> getWorkCategoryLevelList();
+
     List<OccupationCategory> getOccupationCategoryList();
 
     List<IndustryLevel> getAllIndustryList();

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

@@ -129,6 +129,12 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
         return recommendMgtCQuery.getProfessionLevelList();
     }
 
+    @Override
+    public List<WorkCategoryLevel> getWorkCategoryLevelList() {
+        return recommendMgtCQuery.getWorkCategoryLevelList();
+    }
+
+
     @Override
     public PageInfo<ProfessionLevel> getProfessionLikeList(Integer page, Integer rows,String professionName) {
         PageHelper.startPage(page, rows);

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

@@ -65,7 +65,9 @@ public interface RecommendMgtService {
 
     List<ProfessionLevel> getProfessionLevelList();
 
-    PageInfo<ProfessionLevel> getProfessionLikeList(Integer page, Integer rows,String professionName) ;
+    PageInfo<ProfessionLevel> getProfessionLikeList(Integer page, Integer rows,String professionName);
+
+    List<WorkCategoryLevel> getWorkCategoryLevelList();
 
     List<OccupationCategory> getOccupationCategoryList();
 

+ 9 - 0
src/main/java/com/hz/employmentsite/vo/jobUserManager/WorkCategoryLevel.java

@@ -0,0 +1,9 @@
+package com.hz.employmentsite.vo.jobUserManager;
+
+
+import com.hz.employmentsite.model.PcWorkcategory;
+
+public class WorkCategoryLevel extends PcWorkcategory {
+    public String workCategoryLevel;
+    public String parentWorkCategoryName;
+}

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

@@ -242,6 +242,24 @@
         left join pc_profession bb on aa.ParentProfessionID = bb.ProfessionID
         order by bb.OrderNo,aa.OrderNo
     </select>
+    <select id="getWorkCategoryLevelList" resultType="com.hz.employmentsite.vo.jobUserManager.WorkCategoryLevel">
+        select WorkCategoryID, ParentWorkCategoryID, WorkCategoryName, '1' as WorkCategoryLevel
+        from pc_workcategory
+        where ParentWorkCategoryID = ''
+        union all
+        select a.WorkCategoryID, a.ParentWorkCategoryID, a.WorkCategoryName, '2' as WorkCategoryLevel
+        from pc_workcategory a
+                 inner join (select WorkCategoryID from pc_workcategory where ParentWorkCategoryID = '') b
+                            on a.ParentWorkCategoryID = b.WorkCategoryID
+        union all
+        select c.WorkCategoryID, c.ParentWorkCategoryID, c.WorkCategoryName, '3' as WorkCategoryLevel
+        from pc_workcategory c
+                 inner join (select a.WorkCategoryID
+                             from pc_workcategory a
+                                      inner join (select WorkCategoryID from pc_workcategory where ParentWorkCategoryID = '') b
+                                                 on a.ParentWorkCategoryID = b.WorkCategoryID) bb
+                            on c.ParentWorkCategoryID = bb.WorkCategoryID
+    </select>
     <select id="getOccupationCategoryList" resultType="com.hz.employmentsite.vo.jobUserManager.OccupationCategory">
         select OccupationalID, ParentOccupationalID, OccupationalName, '1' as OccupationalLevel
         from pc_occupational