Ver Fonte

Merge remote-tracking branch 'origin/master'

lizeyu há 1 ano atrás
pai
commit
b1bb559485
29 ficheiros alterados com 1264 adições e 1089 exclusões
  1. 12 1
      doc/待更新脚本
  2. 39 0
      h5app/src/api/workLog/index.ts
  3. 8 0
      h5app/src/router/index.ts
  4. 214 0
      h5app/src/views/pages/company/detail.vue
  5. 0 4
      h5app/src/views/pages/company/edit.vue
  6. 23 44
      h5app/src/views/pages/company/list.vue
  7. 148 0
      h5app/src/views/pages/work/log/detail.vue
  8. 56 51
      h5app/src/views/pages/work/log/edit.vue
  9. 192 39
      h5app/src/views/pages/work/log/list.vue
  10. 3 3
      src/main/java/com/hz/employmentsite/controller/companyService/PostController.java
  11. 28 8
      src/main/java/com/hz/employmentsite/enums/DataRangeEnum.java
  12. 10 0
      src/main/java/com/hz/employmentsite/model/PcPost.java
  13. 70 0
      src/main/java/com/hz/employmentsite/model/PcPostExample.java
  14. 15 13
      src/main/java/com/hz/employmentsite/services/impl/UserServiceImpl.java
  15. 2 8
      src/main/java/com/hz/employmentsite/services/impl/companyService/PostServiceImpl.java
  16. 0 1
      src/main/java/com/hz/employmentsite/services/service/companyService/PostService.java
  17. 49 518
      src/main/java/com/hz/employmentsite/util/datarange/DataRangeInterceptor.java
  18. 9 0
      src/main/java/com/hz/employmentsite/util/datarange/annotations/RegionID.java
  19. 4 0
      src/main/java/com/hz/employmentsite/vo/baseSettings/SiteInfoVo.java
  20. 7 0
      src/main/java/com/hz/employmentsite/vo/baseSettings/SiteUserVo.java
  21. 7 0
      src/main/java/com/hz/employmentsite/vo/companyService/CompanyVo.java
  22. 47 28
      src/main/resources/mapping/PcPostMapper.xml
  23. 6 1
      src/main/resources/mapping/cquery/CompanyCQuery.xml
  24. 5 1
      src/main/resources/mapping/cquery/SiteUserCQuery.xml
  25. 5 1
      src/main/resources/mapping/cquery/SysUserCQuery.xml
  26. 2 2
      vue/src/api/companyService/post.ts
  27. 238 284
      vue/src/views/companyService/post/edit.vue
  28. 1 1
      vue/src/views/companyService/post/index.vue
  29. 64 81
      vue/src/views/jobUserManager/jobhunt/edit.vue

+ 12 - 1
doc/待更新脚本

@@ -31,4 +31,15 @@ insert pc_profession values(UUID(),'','文化/传媒',21,1);
 insert pc_profession values(UUID(),'','高级管理',22,1);
 insert pc_profession values(UUID(),'','咨询/法律/翻译',23,1);
 insert pc_profession values(UUID(),'','酒店/旅游',24,1);
-insert pc_profession values(UUID(),'','政府机构/农业',25,1);
+insert pc_profession values(UUID(),'','政府机构/农业',25,1);
+
+-- 2024.4.16
+delete from sys_dictionary_item where DictionaryCode='DataRange';
+
+INSERT INTO sys_dictionary_item (DictionaryItemID, Code, DictionaryCode, Value, Name, OrderNo, RecordStatus, IsEditable) VALUES ('f06c44b6-a77a-11ed-a6c5-7085c2a9999e', '', 'DataRange', 0, '全部', 0, 1, 0);
+INSERT INTO sys_dictionary_item (DictionaryItemID, Code, DictionaryCode, Value, Name, OrderNo, RecordStatus, IsEditable) VALUES ('f06cf371-a77a-11ed-a6c5-7085c2a9999e', '', 'DataRange', 1, '市', 10, 1, 0);
+INSERT INTO sys_dictionary_item (DictionaryItemID, Code, DictionaryCode, Value, Name, OrderNo, RecordStatus, IsEditable) VALUES ('f06cf371-a77a-11ed-a6c5-7185c2a9999e', '', 'DataRange', 2, '区', 20, 1, 0);
+INSERT INTO sys_dictionary_item (DictionaryItemID, Code, DictionaryCode, Value, Name, OrderNo, RecordStatus, IsEditable) VALUES ('f06cf371-a77a-11ed-a6c5-7285c2a9999e', '', 'DataRange', 3, '机构', 30, 1, 0);
+INSERT INTO sys_dictionary_item (DictionaryItemID, Code, DictionaryCode, Value, Name, OrderNo, RecordStatus, IsEditable) VALUES ('f06cf371-a77a-11ed-a6c5-7385c2a9999e', '', 'DataRange', 4, '驿站', 40, 1, 0);
+INSERT INTO sys_dictionary_item (DictionaryItemID, Code, DictionaryCode, Value, Name, OrderNo, RecordStatus, IsEditable) VALUES ('f06cf371-a77a-11ed-a6c5-7485c2a9999e', '', 'DataRange', 5, '企业', 50, 1, 0);
+INSERT INTO sys_dictionary_item (DictionaryItemID, Code, DictionaryCode, Value, Name, OrderNo, RecordStatus, IsEditable) VALUES ('f06cf371-a77a-11ed-a6c5-7585c3a9999e', '', 'DataRange', 6, '本人', 60, 1, 0);

+ 39 - 0
h5app/src/api/workLog/index.ts

@@ -38,4 +38,43 @@ export function saveWorkLog(data: any) {
     );
 }
 
+/**
+ * 删除工作日志
+ * @param ids 工作日志ID集合
+ */
+export function deleteWorkLog(ids: Array<any>) {
+    return request(
+        {
+            url: "taskAndLog/doWork/delete",
+            method: 'post',
+            data: ids
+        },
+        {
+            isNew: true,
+            errorMsg: '提交失败!'
+        },
+    );
+}
+
+/**
+ * 按登记用户ID和工作日期查询驿站人员当天工作所记录的业务数据数量
+ * @param userId 用户ID
+ * @param workTime 工作时间
+ */
+export function getRecordsCount(userId: string, workTime: string) {
+    return request<object>(
+        {
+            url: 'taskAndLog/doWork/getRecordsCount',
+            method: 'get',
+            params: {
+                userId,
+                workTime,
+            }
+        },
+        {
+            isNew: true,
+        }
+    )
+}
+
 

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

@@ -48,6 +48,10 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/company/list',
                 component: () => import('@/views/pages/company/list.vue')
             },
+            {
+                path: 'tabMain/company/detail',
+                component: () => import('@/views/pages/company/detail.vue')
+            },
             {
                 path: 'tabMain/company/menu',
                 component: () => import('@/views/pages/company/menu.vue')
@@ -88,6 +92,10 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/work/log/edit',
                 component: () => import('@/views/pages/work/log/edit.vue')
             },
+            {
+                path: 'tabMain/work/log/detail',
+                component: () => import('@/views/pages/work/log/detail.vue')
+            },
             {
                 path: 'tabMain/work/task/list',
                 component: () => import('@/views/pages/work/task/list.vue')

+ 214 - 0
h5app/src/views/pages/company/detail.vue

@@ -0,0 +1,214 @@
+<template>
+  <ion-page>
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
+        </ion-buttons>
+        <ion-title>
+          企业信息详情
+        </ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <div class="bw-vue-form">
+        <div class="form-detail">
+          <ion-label>企业名称</ion-label>
+          <ion-text>{{ dataModel.companyName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>统一信用代码</ion-label>
+          <ion-text>{{ dataModel.companyCode }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>企业地址</ion-label>
+          <ion-text>{{ dataModel.companyAddress }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>所属驿站</ion-label>
+          <ion-text>{{ dataModel.siteName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>联系人</ion-label>
+          <ion-text>{{ dataModel.userName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>联系电话</ion-label>
+          <ion-text>{{ dataModel.userMobile }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>企业简介</ion-label>
+          <ion-text>{{ dataModel.companyDesc }}</ion-text>
+        </div>
+      </div>
+    </ion-content>
+    <ion-footer>
+    </ion-footer>
+  </ion-page>
+</template>
+<script lang="ts">
+import {defineComponent, ref, reactive, watch, toRefs} from "vue";
+import {getCompanyById} from "@/api/company";
+import {useRoute, useRouter} from "vue-router";
+import {onIonViewDidEnter} from "@ionic/vue";
+import {arrowBackOutline} from 'ionicons/icons';
+
+
+interface FormData{
+  dataModel:any
+}
+export default defineComponent({
+  name: 'CompanyMenu',
+  setup() {
+    const router = useRouter();
+    const route = useRoute();
+    const loading = ref<boolean>(false);
+    const formData = reactive<FormData>({
+      dataModel: {
+        companyID:null,
+        companyName:null
+      }
+    });
+    const onBack=()=>{
+      router.push({path:'./list',query:{reload:1}});
+    };
+
+    const onPathForward = (pathValue:string,statusValue:any)=>{
+      router.push({path: pathValue, query: {reload:1,id:formData.dataModel.companyID,status:statusValue}});
+    };
+
+    const loadData = async (companyID:any)=>{
+      loading.value = true;
+      const reqData = await getCompanyById(companyID);
+      formData.dataModel = reqData;
+      console.log("dataModel",formData.dataModel);
+      loading.value = false;
+    };
+
+    const reload = (companyID:any) => {
+      loadData(companyID);
+    };
+
+    watch(() => route.query, () => {
+      if (route.query.reload) {
+        reload(route.query.id);
+      }
+    });
+
+    onIonViewDidEnter(() => {
+      if (route.query.reload) {
+        reload(route.query.id)
+      }
+    });
+
+
+    return {
+      ...toRefs(formData),
+      arrowBackOutline,
+      route,
+      loading,
+      onPathForward,
+      onBack,
+      loadData,
+      router,
+    }
+  },
+  mounted() {
+    const companyID = this.route.query.id;
+    this.loadData(companyID);
+  }
+});
+</script>
+
+<style lang="less">
+ion-item {
+  --border-width: 0;
+  --border-style: none;
+
+  ion-label, ion-input, ion-select, ion-datetime-button {
+    font-size: 14px !important;
+  }
+}
+
+.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>

+ 0 - 4
h5app/src/views/pages/company/edit.vue

@@ -289,7 +289,6 @@ export default defineComponent({
       {value: 0, name: '否'},
     ];
 
-
     const getCompanyModelList = async function(){
       const companyModelResult :any = await getSysDictionaryList("CompanyModel");
       companyModelList.value = companyModelResult;
@@ -395,10 +394,7 @@ export default defineComponent({
     };
 
     const onBack=()=>{
-      if(isAdd.value)
         router.push({path: './list', query: {reload:1}});
-      else if(curStepData.value.statusVal==1)
-        router.push({path: './menu', query: {reload:1,id:formState.dataModel.companyID,status:2}});
     }
 
     const getRegionListData = () => {

+ 23 - 44
h5app/src/views/pages/company/list.vue

@@ -18,46 +18,26 @@
         <ion-button slot="end" style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;" @click="reload" >搜索
         </ion-button>
       </ion-item>
-      <ion-list class="list-content">
-        <ion-item v-for="(record,key) in dataList" :key="key" detail @click="onEdit(record.companyID)">
-          <ion-grid>
-            <ion-row>
-              <ion-col>
-                <ion-label style="display: flex;justify-content: space-between;">
-                  <ion-text>
-                    {{ record.companyName }}
-                  </ion-text>
-                  <ion-label slot="end">
-                    <ion-text style="text-align:right;color:#3a7be0;">◆</ion-text>
-                    <ion-text style="text-align:right;">正在跟进</ion-text>
-                  </ion-label>
-                </ion-label>
-              </ion-col>
-            </ion-row>
-            <ion-row>
-              <ion-col>
-                <ion-label>
-                  <p>
-                    最新跟进时间:{{ dayjs(record.modifyTime).format("YYYY-MM-DD")}}
-                  </p>
-                </ion-label>
-              </ion-col>
-            </ion-row>
-            <ion-row>
-              <ion-col>
-                <ion-label style="display: flex;justify-content: space-between;">
-                  <p>
-                    参保人数:{{ record.insuredCount==null?"0":record.insuredCount }}人
-                  </p>
-                  <p>
-                    岗位数量:{{ record.postCount }}
-                  </p>
-                </ion-label>
-              </ion-col>
-            </ion-row>
-          </ion-grid>
-        </ion-item>
-      </ion-list>
+
+      <div class="bw-vue-list">
+        <div class="list-content">
+          <ion-list>
+            <ion-item v-for="(record,key) in dataList" :key="key" detail @click="onDetail(record.companyID)">
+              <ion-label>
+                <div class="multi-title">
+                  <h2>{{ record.companyName }}</h2>
+                </div>
+                <p>地点:{{record.companyAddress}}</p>
+                <p>联系人:{{record.userName}}</p>
+                <div class="multi-title">
+                  <p>联系电话:{{record.userMobile}}</p>
+                  <p>岗位数量:{{ record.postCount }}</p>
+                </div>
+              </ion-label>
+            </ion-item>
+          </ion-list>
+        </div>
+      </div>
       <b-empty v-if="dataList.length<=0" :loading="loading"/>
       <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
         <ion-infinite-scroll-content
@@ -130,8 +110,8 @@ export default defineComponent({
       router.push({path: './edit', query: {reload: 1,id: null,status: 1}});
     }
 
-    const onEdit = (companyID:string) => {
-      router.push({path: './menu', query: {reload: 1,id: companyID,status: 2}});
+    const onDetail = (companyID:string) => {
+      router.push({path: './detail', query: {reload: 1,id: companyID}});
     }
 
 
@@ -156,7 +136,7 @@ export default defineComponent({
       searchParams,
       onBack,
       onAdd,
-      onEdit,
+      onDetail,
       onScroll,
       loadData,
       reload,
@@ -182,7 +162,6 @@ export default defineComponent({
     ion-item {
       margin-top: 10px;
       font-size: 14px;
-      border: 1px solid rgb(242, 242, 245);
 
       p {
         font-size: 12px;

+ 148 - 0
h5app/src/views/pages/work/log/detail.vue

@@ -0,0 +1,148 @@
+<template>
+  <ion-page class="list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onCancel"></ion-icon>
+        </ion-buttons>
+        <ion-title>工作日志详情</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <!-- 详情 -->
+      <div class="bw-vue-form">
+        <div class="form-title">基本信息</div>
+        <div class="form-detail">
+          <ion-label>工作日志日期</ion-label>
+          <ion-text>{{ workLogData.dataModel.workTime }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>日志类型</ion-label>
+          <ion-text>{{ workLogData.dataModel.logTypeName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>工作内容</ion-label>
+          <ion-text>{{ workLogData.dataModel.workContent }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>走访企业数量</ion-label>
+          <ion-text>{{ recordsCount.RecordsCompanyNum }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>收集岗位</ion-label>
+          <ion-text>{{ recordsCount.RecordsPostNum }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>登记求职人员</ion-label>
+          <ion-text>{{ recordsCount.RecordsJobuserNum }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>求职意向</ion-label>
+          <ion-text>{{ recordsCount.RecordsJobhuntNum }}</ion-text>
+        </div>
+      </div>
+    </ion-content>
+    <ion-loading
+        :is-open="loading"
+        message="加载中..."
+        @didDismiss="setOpen(false)" >
+    </ion-loading>
+  </ion-page>
+</template>
+<script setup lang="ts">
+import {computed, defineComponent, reactive, ref, toRefs} from "vue";
+import {getSysDictionaryList} from '@/api/system/dictionary';
+import {getRecordsCount, getWorkLogById, saveWorkLog} from '@/api/workLog';
+import {useRoute, useRouter} from "vue-router";
+import {alertController, onIonViewDidEnter} from "@ionic/vue";
+import {arrowBackOutline} from 'ionicons/icons';
+import {required} from "@vuelidate/validators";
+import {useVuelidate} from "@vuelidate/core";
+import dayjs from "dayjs";
+
+interface workLogModel {
+  dataModel:any
+}
+interface SelectProps {
+  name: string,
+  value: string
+}
+
+const router = useRouter();
+const route = useRoute();
+const loading = ref(false);
+const logTypeList=ref<SelectProps[]>([]);
+const workLogData = reactive<workLogModel>({
+  dataModel:{
+    doWorkID: null,
+    workTime: dayjs().format("YYYY-MM-DD"),
+    doTypeID:null,
+    workContent: null
+  }});
+// 日志当天完成工作量数据
+const recordsCount = reactive<any>({
+  RecordsCompanyNum: null,
+  RecordsJobuserNum: null,
+  RecordsPostNum: null,
+  RecordsJobhuntNum: null,
+});
+
+const onCancel = () => {
+  router.push("./list");
+}
+
+const getWorkTypeList = async function(){
+  const data:any =await getSysDictionaryList("LogType");
+  logTypeList.value = data;
+};
+
+const setOpen = (isOpen: boolean) => {
+  loading.value = isOpen;
+};
+
+const loadData = async (doWorkID: any) => {
+  loading.value = true;
+  await getWorkTypeList();
+  const reqData = await getWorkLogById(doWorkID);
+  workLogData.dataModel = reqData;
+  if(workLogData.dataModel.workTime==null){
+    workLogData.dataModel.workTime = dayjs(new Date().toLocaleDateString()).format("YYYY-MM-DD")+"T00:00:00.000+08:00";
+  }
+  console.log("初始化dataModel",workLogData.dataModel);
+  // 查询当天登记业务数据数量
+  await getRecordsCount(workLogData.dataModel.userId, workLogData.dataModel.workTime).then((res:any)=>{
+    Object.keys(recordsCount).forEach((key)=>{
+      recordsCount[key] = res[key];
+    })
+  });
+  loading.value = false;
+};
+
+
+const reload = (doWorkID: any) => {
+  workLogData.dataModel = {};
+  loadData(doWorkID);
+}
+
+onIonViewDidEnter(() => {
+  if (route.query.reload)
+    reload(route.query.doWorkID);
+});
+</script>
+
+<style lang="less">
+
+.custom{
+  --placeholder-color: gray;
+  --placeholder-font-style:italic;
+  --placeholder-opacity: 1;
+}
+
+.title-item{
+  margin-left: 15px;
+  color:#1c3d70 !important;
+  font-size: 14px !important;
+  font-weight: bold;
+}
+
+</style>

+ 56 - 51
h5app/src/views/pages/work/log/edit.vue

@@ -1,65 +1,58 @@
 <template>
-  <ion-page>
+  <ion-page class="list-page">
     <ion-header class="header-theme2">
       <ion-toolbar>
         <ion-buttons slot="start">
           <ion-icon :icon="arrowBackOutline" @click="onCancel"></ion-icon>
         </ion-buttons>
-        <ion-title>{{isAdd?"工作日志录入":"工作日志详情"}}</ion-title>
+        <ion-title>工作日志编辑</ion-title>
       </ion-toolbar>
     </ion-header>
     <ion-content>
-      <form autocomplete="off">
-        <ion-item>
-          <div class="panel-title2">
-            <div class="item-flag"></div>
-            基本信息
+      <!-- 编辑 -->
+      <form>
+        <div class="bw-vue-form">
+          <div class="form-title">基本信息</div>
+          <div class="form-input">
+            <ion-label>
+              工作日志日期
+              <span class="danger">*</span>
+            </ion-label>
+            <div class="dateTimeBox">
+              <ion-datetime-button class="dateTimeBtn" datetime="workTime"></ion-datetime-button>
+              <ion-modal :keep-contents-mounted="true">
+                <ion-datetime id="workTime" placeholder="日期"
+                              v-model="dataModel.workTime"  :prefer-wheel="true"
+                              dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
+                              :show-default-buttons="true">
+                </ion-datetime>
+              </ion-modal>
+<!--              <span style="margin-right: 5px; color: #02a6f1">选择</span>-->
+            </div>
           </div>
-        </ion-item>
-        <ion-list>
-          <ion-label class="title-item">工作日志日期<span class="danger">*</span></ion-label>
-          <ion-item  mode="md"  :class="[workLogValid.dataModel.workTime.$error?'ion-invalid':'ion-valid']" v-if="isAdd">
-            <ion-datetime-button datetime="workTime" ></ion-datetime-button>
-            <ion-modal :keep-contents-mounted="true">
-              <ion-datetime id="workTime" placeholder="日期"
-                            v-model="dataModel.workTime"  :prefer-wheel="true"
-                            dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
-                            :show-default-buttons="true">
-              </ion-datetime>
-            </ion-modal>
-            <ion-note slot="error">工作日志日期不能为空</ion-note>
-          </ion-item>
-          <ion-item v-if="!isAdd">
-            <ion-label >{{dataModel.workTime}}</ion-label>
-          </ion-item>
-          <ion-label class="title-item">日志类型<span class="danger">*</span></ion-label>
-          <ion-item  mode="md" :class="[workLogValid.dataModel.doTypeID.$error?'ion-invalid':'ion-valid']"  v-if="isAdd">
-            <ion-select name="doTypeID"  id="doTypeID" okText="确定" cancelText="取消" v-model="dataModel.doTypeID"
-                        interface="action-sheet" placeholder="请选择日志类型" style="width:100%;text-align: left;">
-              <ion-select-option v-for=" (it,key) in logTypeList" :key="key" :value="it.value">
+          <div class="form-select">
+            <ion-label>
+              日志类型
+              <span class="danger">*</span>
+            </ion-label>
+            <ion-select name="doTypeID" id="doTypeID" interface="action-sheet" okText="确定" cancelText="取消" v-model="dataModel.doTypeID" placeholder="请选择日志类型">
+              <ion-select-option v-for="(it,key) in logTypeList" :key="key" :value="it.value">
                 {{ it.name }}
               </ion-select-option>
             </ion-select>
-            <ion-note slot="error">日志类型不能为空</ion-note>
-          </ion-item>
-          <ion-item v-if="!isAdd">
-            <ion-label >{{dataModel.logTypeName}}</ion-label>
-          </ion-item>
-          <ion-label class="title-item">工作内容<span class="danger">*</span></ion-label>
-          <ion-item mode="md" :class="[workLogValid.dataModel.workContent.$error?'ion-invalid':'ion-valid']" v-if="isAdd">
-              <ion-textarea name="workContent" id="workContent" class="custom"
-                            v-model="dataModel.workContent"  label-placement="stacked"
-                            style="text-align: left;" placeholder="请输入工作内容" rows="4"></ion-textarea>
-            <ion-note slot="error">工作内容不能为空</ion-note>
-          </ion-item>
-          <ion-item v-if="!isAdd">
-            <ion-label >{{dataModel.workContent}}</ion-label>
-          </ion-item>
-        </ion-list>
+          </div>
+          <div class="form-input">
+            <ion-label>
+              工作内容
+              <span class="danger">*</span>
+            </ion-label>
+            <ion-textarea name="workContent" id="workContent" placeholder="请输入工作内容" :rows="3" v-model="dataModel.workContent"></ion-textarea>
+          </div>
+        </div>
       </form>
     </ion-content>
     <ion-footer>
-      <ion-button shape="round" expand="block" v-if="isAdd" @click="onSave">提交</ion-button>
+      <ion-button shape="round" expand="block" @click="onSave">提交</ion-button>
     </ion-footer>
     <ion-loading
         :is-open="loading"
@@ -71,7 +64,7 @@
 <script lang="ts">
 import {computed, defineComponent, reactive, ref, toRefs} from "vue";
 import {getSysDictionaryList} from '@/api/system/dictionary';
-import {getWorkLogById,saveWorkLog} from '@/api/workLog';
+import {getWorkLogById, saveWorkLog} from '@/api/workLog';
 import {useRoute, useRouter} from "vue-router";
 import {alertController, onIonViewDidEnter} from "@ionic/vue";
 import {arrowBackOutline} from 'ionicons/icons';
@@ -92,7 +85,6 @@ export default defineComponent({
   setup() {
     const router = useRouter();
     const route = useRoute();
-    const isAdd = ref<boolean>(false);
     const loading = ref(false);
     const logTypeList=ref<SelectProps[]>([]);
     const workLogData = reactive<workLogModel>({
@@ -102,6 +94,13 @@ export default defineComponent({
         doTypeID:null,
         workContent: null
     }});
+    // 日志当天完成工作量数据
+    const recordsCount = reactive<any>({
+      RecordsCompanyNum: null,
+      RecordsJobuserNum: null,
+      RecordsPostNum: null,
+      RecordsJobhuntNum: null,
+    });
     const workLogRules = computed(()=>{
       return {dataModel:{
           workTime:{required},
@@ -150,7 +149,6 @@ export default defineComponent({
 
     const loadData = async (doWorkID: any) => {
       loading.value = true;
-      isAdd.value = doWorkID == null;
       await getWorkTypeList();
       const reqData = await getWorkLogById(doWorkID);
       workLogData.dataModel = reqData;
@@ -176,7 +174,6 @@ export default defineComponent({
     return {
       ...toRefs(workLogData),
       arrowBackOutline,
-      isAdd,
       logTypeList,
       setOpen,
       onSave,
@@ -185,7 +182,8 @@ export default defineComponent({
       route,
       router,
       loading,
-      workLogValid
+      workLogValid,
+      recordsCount
     }
   }
 });
@@ -206,4 +204,11 @@ export default defineComponent({
   font-weight: bold;
 }
 
+.dateTimeBox {
+  width: 100%;
+  display: flex;
+  margin-top: 5px;
+  justify-content: space-between;
+  align-content: center;
+}
 </style>

+ 192 - 39
h5app/src/views/pages/work/log/list.vue

@@ -12,36 +12,70 @@
       </ion-toolbar>
     </ion-header>
     <ion-content>
-      <ion-item class="search-item">
-        <ion-input type="date" mode="md" v-model="searchParamsState.workStartDate" style="width: 105px;"></ion-input>
-        <ion-label style="margin:0px 5px 0px 5px">至</ion-label>
-        <ion-input type="date" mode="md" v-model="searchParamsState.workEndDate" style="width: 105px;"></ion-input>
+      <ion-item style="font-size: 10px;--border-style: none;">
+        <label>日期:</label>
+        <ion-datetime-button datetime="reportDateBegin"></ion-datetime-button>
+        <span style="margin:0 5px">至</span>
+        <ion-modal :keep-contents-mounted="true">
+          <ion-datetime id="reportDateBegin" placeholder="日期"
+                        v-model="searchParamsState.workStartDate"
+                        dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
+                        @ionChange="onSearch"
+                        :show-default-buttons="true">
+          </ion-datetime>
+        </ion-modal>
+        <ion-datetime-button datetime="reportDateEnd"></ion-datetime-button>
+        <ion-modal :keep-contents-mounted="true">
+          <ion-datetime id="reportDateEnd" placeholder="日期"
+                        v-model="searchParamsState.workEndDate"
+                        dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
+                        @ionChange="onSearch"
+                        :show-default-buttons="true">
+          </ion-datetime>
+        </ion-modal>
         <ion-button slot="end" style="height: 33px;width:70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;" @click="onSearch">搜索</ion-button>
       </ion-item>
-      <ion-list class="list-content">
-        <ion-item v-for="(record,key) in dataList" :key="key" detail>
-          <ion-grid @click="onDetail(record.doWorkID)" >
-            <ion-row>
-              <ion-col>
-                <ion-label style="display: flex;justify-content: space-between;">
-                  <ion-text>
-                    {{ record.workTime }}工作日志
-                  </ion-text>
-                </ion-label>
-              </ion-col>
-            </ion-row>
-            <ion-row>
-              <ion-col>
-                <ion-label>
-                  <p>
-                    日志类型:{{ record.logTypeName }}
-                  </p>
-                </ion-label>
-              </ion-col>
-            </ion-row>
-          </ion-grid>
-        </ion-item>
-      </ion-list>
+      <!-- 滑动数据列表 -->
+      <div class="panel-content" v-if="!loading">
+        <div v-for="(record,key) in dataList" :key="key" style="border: 1px solid rgb(242, 242, 245); margin: 10px; border-radius: 10px">
+          <ion-item-sliding>
+            <ion-item>
+              <ion-grid @click="onDetail(record.doWorkID)">
+                <ion-row>
+                  <ion-col>
+                    <ion-label style="display: flex;justify-content: space-between;">
+                      <ion-text>
+                        {{ record.workTime }}工作日志
+                      </ion-text>
+                    </ion-label>
+                  </ion-col>
+                </ion-row>
+                <ion-row>
+                  <ion-col>
+                    <ion-label>
+                      <p>
+                        日志类型:{{ record.logTypeName }}
+                      </p>
+                    </ion-label>
+                  </ion-col>
+                </ion-row>
+              </ion-grid>
+              <span @click="onDetail(record.doWorkID)">
+                <ion-icon :icon="chevronForwardOutline" slots="end"></ion-icon>
+              </span>
+            </ion-item>
+
+            <ion-item-options>
+              <ion-item-option @click="onEdit(record.doWorkID)">
+                <ion-icon :icon="buildOutline"></ion-icon>
+              </ion-item-option>
+              <ion-item-option color="danger" @click="setDelAlertOpen(true, record.doWorkID)">
+                <ion-icon :icon="trashOutline"></ion-icon>
+              </ion-item-option>
+            </ion-item-options>
+          </ion-item-sliding>
+        </div>
+      </div>
       <b-empty v-if="dataList.length<=0" :loading="loading"/>
       <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
         <ion-infinite-scroll-content
@@ -50,18 +84,41 @@
         </ion-infinite-scroll-content>
       </ion-infinite-scroll>
     </ion-content>
+
+    <ion-alert
+        :is-open="delAlertOpen"
+        header="删除确认"
+        message="确定要删除该工作日志吗?"
+        :buttons="delAlertButtons"
+        @didDismiss="setDelAlertOpen(false, null)"
+    ></ion-alert>
+
+    <ion-alert
+        :is-open="infoAlertOpen"
+        :header="infoAlterData.title"
+        :message="infoAlterData.message"
+        :buttons="infoAlertButtons"
+        @didDismiss="setInfoAlertOpen(false)"
+    ></ion-alert>
+
+    <ion-loading
+        :is-open="delLoading"
+        message="删除中..."
+        @didDismiss="setDelLoadingOpen(false)" >
+    </ion-loading>
   </ion-page>
 </template>
 
 <script lang="ts">
 
 import {useRouter} from "vue-router";
-import {defineComponent, reactive, ref} from 'vue';
-import {arrowBackOutline, ellipse, addCircleOutline} from 'ionicons/icons';
+import {defineComponent, onMounted, reactive, ref} from 'vue';
+import {arrowBackOutline, addCircleOutline} from 'ionicons/icons';
 import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
-import {getWorkLogList} from '@/api/workLog';
+import {deleteWorkLog, getWorkLogList} from '@/api/workLog';
 import BEmpty from "@/components/empty.vue";
 import dayjs from "dayjs";
+import {chevronForwardOutline,buildOutline,trashOutline} from 'ionicons/icons';
 
 export default defineComponent({
   name: 'WorkLogList',
@@ -79,6 +136,61 @@ export default defineComponent({
     const router = useRouter();
     const colors = ref(["secondary", "tertiary", "success", "warning"]);
 
+    // 删除警告弹窗按钮定义
+    const delAlertButtons = [
+      {
+        text: '取消',
+        role: 'cancel',
+        handler: () => {
+          console.log('Alert canceled');
+        },
+      },
+      {
+        text: '确定',
+        role: 'confirm',
+        handler: () => {
+          delLoading.value = true
+          deleteWorkLog(delWorkIds.value).then((res) => {
+            infoAlterData.title = "提示";
+            infoAlterData.message = "删除成功";
+            setInfoAlertOpen(true);
+          }).finally(()=>{
+            delLoading.value = false
+          })
+        },
+      },
+    ];
+    // 删除警告弹窗开关
+    const delAlertOpen = ref(false);
+    // 删除数据
+    const delWorkIds = ref<Array<any>>([])
+    // 删除加载
+    const delLoading = ref(false);
+    // 信息弹窗开关
+    const infoAlertOpen = ref(false);
+    // 信息弹窗内容
+    const infoAlterData = reactive({
+      title:"",
+      message:""
+    })
+    // 删除警告弹窗按钮定义
+    const infoAlertButtons = [
+      {
+        text: '确定',
+        role: 'confirm',
+        handler: () => {
+          loading.value = true;
+          getWorkLogList(searchParamsState).then(res=>{
+            dataList.value = res.list;
+            searchParamsState.total = res.total;
+          }).finally(() => {
+            loading.value = false;
+          })
+        },
+      },
+    ];
+
+
     const loadData = async function () {
       loading.value = true;
       const result: any = await getWorkLogList(searchParamsState);
@@ -103,23 +215,29 @@ export default defineComponent({
       router.push({path: './edit', query: {reload: 1, doWorkID: null}});
     }
 
+    const onEdit = (doWorkID: string) => {
+      router.push({path: './edit', query: {reload: 1, doWorkID: doWorkID}});
+    }
+
     const onBack =()=>{
       router.push('../');
     }
 
     const onDetail = (doWorkID:string) =>{
-      router.push({path: './edit', query: {reload:1, doWorkID: doWorkID}});
+      router.push({path: './detail', query: {reload:1, doWorkID: doWorkID}});
     }
 
     const reload = () => {
+      // 设置查询初始截止日期为当天
       const firstDay = new Date();
-      firstDay.setMonth(firstDay.getMonth());
-      firstDay.setDate(1);
-      const lastDay = new Date(firstDay.getFullYear(), firstDay.getMonth() + 1, 0);
+      // 设置查询初始开始时间为当天的一个月前
+      const lastDay = new Date();
+      lastDay.setDate(firstDay.getDate() - 30);
+
       dataList.value = [];
       searchParamsState.pageIndex = 1;
-      searchParamsState.workStartDate=dayjs(firstDay.toLocaleDateString()).format('YYYY-MM-DD');
-      searchParamsState.workEndDate = dayjs(lastDay.toLocaleDateString()).format('YYYY-MM-DD');
+      searchParamsState.workStartDate=dayjs(lastDay.toLocaleDateString()).format('YYYY-MM-DD');
+      searchParamsState.workEndDate = dayjs(firstDay.toLocaleDateString()).format('YYYY-MM-DD');
       loadData();
     }
 
@@ -129,9 +247,31 @@ export default defineComponent({
       loadData();
     }
 
-    onIonViewDidEnter(() => {
+    // 设置要删除的日志
+    function setDelAlertOpen(value: boolean, doWorkId: any) {
+      delAlertOpen.value = value;
+      if(doWorkId != null) {
+        delWorkIds.value = new Array(doWorkId);
+      }
+    }
+
+    // 设置删除弹窗开启关闭
+    function setDelLoadingOpen(value: boolean) {
+      delLoading.value = value
+    }
+
+    // 设置信息提示弹窗开关
+    function setInfoAlertOpen(value: boolean) {
+      infoAlertOpen.value = value;
+    }
+
+    // onIonViewDidEnter(() => {
+    //   reload();
+    // });
+
+    onMounted(() => {
       reload();
-    });
+    })
 
     return {
       router,
@@ -148,6 +288,19 @@ export default defineComponent({
       reload,
       arrowBackOutline,
       addCircleOutline,
+      chevronForwardOutline,
+      buildOutline,
+      trashOutline,
+      onEdit,
+      delAlertButtons,
+      delAlertOpen,
+      setDelAlertOpen,
+      delLoading,
+      setDelLoadingOpen,
+      infoAlertOpen,
+      infoAlterData,
+      setInfoAlertOpen,
+      infoAlertButtons
     }
   }
 });

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

@@ -76,9 +76,9 @@ public class PostController {
         return RespGenerstor.success(result);
     }
 
-    @PostMapping("/savePostList")
-    public  BaseResponse<Integer> savePostList(@RequestBody List<PostVo> data){
-        var result=postService.savePostList(data,accountService.getLoginUserID());
+    @PostMapping("/savePost")
+    public  BaseResponse<Integer> savePost(@RequestBody PostVo data){
+        var result= postService.save(data,accountService.getLoginUserID());
         return RespGenerstor.success(result);
     }
 

+ 28 - 8
src/main/java/com/hz/employmentsite/enums/DataRangeEnum.java

@@ -1,11 +1,31 @@
 package com.hz.employmentsite.enums;
 
-public interface DataRangeEnum {
-    int City = 6;
-    int Region = 5;
-    int Institution = 4;
-    int Site = 3;
-    int Company = 2;
-    int SELF = 1;
-    int ALL = 0;
+public enum DataRangeEnum {
+    ALL(0),
+    City(1),
+    Region(2),
+    Institution(3),
+    Site(4),
+    Company(5),
+    SELF(6);
+
+    private final int value;
+
+    DataRangeEnum(int value) {
+        this.value = value;
+    }
+
+    public int getValue() {
+        return value;
+    }
+
+    public static DataRangeEnum getDataRangeByValue(int value) {
+        for (DataRangeEnum dataRangeEnum : DataRangeEnum.values()) {
+            if (dataRangeEnum.value == value) {
+                return dataRangeEnum;
+            }
+        }
+        return null;
+    }
+
 }

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

@@ -6,6 +6,8 @@ import java.util.Date;
 public class PcPost {
     private String postID;
 
+    private String professionID;
+
     private String workCode;
 
     private String workName;
@@ -74,6 +76,14 @@ public class PcPost {
         this.postID = postID == null ? null : postID.trim();
     }
 
+    public String getProfessionID() {
+        return professionID;
+    }
+
+    public void setProfessionID(String professionID) {
+        this.professionID = professionID == null ? null : professionID.trim();
+    }
+
     public String getWorkCode() {
         return workCode;
     }

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

@@ -176,6 +176,76 @@ public class PcPostExample {
             return (Criteria) this;
         }
 
+        public Criteria andProfessionIDIsNull() {
+            addCriterion("ProfessionID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDIsNotNull() {
+            addCriterion("ProfessionID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDEqualTo(String value) {
+            addCriterion("ProfessionID =", value, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDNotEqualTo(String value) {
+            addCriterion("ProfessionID <>", value, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDGreaterThan(String value) {
+            addCriterion("ProfessionID >", value, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDGreaterThanOrEqualTo(String value) {
+            addCriterion("ProfessionID >=", value, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDLessThan(String value) {
+            addCriterion("ProfessionID <", value, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDLessThanOrEqualTo(String value) {
+            addCriterion("ProfessionID <=", value, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDLike(String value) {
+            addCriterion("ProfessionID like", value, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDNotLike(String value) {
+            addCriterion("ProfessionID not like", value, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDIn(List<String> values) {
+            addCriterion("ProfessionID in", values, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDNotIn(List<String> values) {
+            addCriterion("ProfessionID not in", values, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDBetween(String value1, String value2) {
+            addCriterion("ProfessionID between", value1, value2, "professionID");
+            return (Criteria) this;
+        }
+
+        public Criteria andProfessionIDNotBetween(String value1, String value2) {
+            addCriterion("ProfessionID not between", value1, value2, "professionID");
+            return (Criteria) this;
+        }
+
         public Criteria andWorkCodeIsNull() {
             addCriterion("WorkCode is null");
             return (Criteria) this;

+ 15 - 13
src/main/java/com/hz/employmentsite/services/impl/UserServiceImpl.java

@@ -63,27 +63,29 @@ public class UserServiceImpl implements UserService {
                     DataRange menuDataRange = new DataRange();
                     menuDataRange.setMenuNo(key);
                     menuDataRange.setRange(dataRangeID);
+                    DataRangeEnum dataRangeEnum = DataRangeEnum.getDataRangeByValue(dataRangeID);
 
-                    switch (dataRangeID) {
-                        case DataRangeEnum.SELF:
-                            menuDataRange.setRangeIDList(List.of(userID));
+                    switch (dataRangeEnum) {
+                        case ALL:
                             break;
-                        case DataRangeEnum.Company:
-                            menuDataRange.setRangeIDList(userCompanyList);
+                        case City:
+                            menuDataRange.setRangeIDList(userCityList);
                             break;
-                       case DataRangeEnum.Site:
-                            menuDataRange.setRangeIDList(userSiteList);
+                        case Region:
+                            menuDataRange.setRangeIDList(userRegionList);
                             break;
-                       case DataRangeEnum.Institution:
+                        case Institution:
                             menuDataRange.setRangeIDList(userInstitutionList);
                             break;
-                       case DataRangeEnum.Region:
-                            menuDataRange.setRangeIDList(userRegionList);
+                        case Site:
+                            menuDataRange.setRangeIDList(userSiteList);
                             break;
-                        case DataRangeEnum.City:
-                            menuDataRange.setRangeIDList(userCityList);
+                        case Company:
+                            menuDataRange.setRangeIDList(userCompanyList);
+                            break;
+                        case SELF:
+                            menuDataRange.setRangeIDList(List.of(userID));
                             break;
-                        case DataRangeEnum.ALL:
                         default:
                             break;
                     }

+ 2 - 8
src/main/java/com/hz/employmentsite/services/impl/companyService/PostServiceImpl.java

@@ -110,6 +110,7 @@ public class PostServiceImpl implements PostService {
         if (dbData == null) {
             dbData = new PcPost();
             dbData.setPostID(UUID.randomUUID().toString());
+            dbData.setProfessionID(data.getProfessionID());
             dbData.setWorkCode(data.getWorkCode());
             dbData.setWorkName(data.getWorkName());
             dbData.setValidTime(data.getValidTime());
@@ -141,6 +142,7 @@ public class PostServiceImpl implements PostService {
             dbData.setEndTime(data.getEndTime());
             result = pcPostMapper.insert(dbData);
         } else {
+            dbData.setProfessionID(data.getProfessionID());
             dbData.setWorkCode(data.getWorkCode());
             dbData.setValidTime(data.getValidTime());
             dbData.setWorkName(data.getWorkName());
@@ -175,14 +177,6 @@ public class PostServiceImpl implements PostService {
         return result;
     }
 
-    @Override
-    public int savePostList(List<PostVo> data, String userId) {
-        int rows=0;
-         for(PostVo post :data){
-             rows+=this.save(post,userId);
-         }
-         return rows;
-    }
 
     @Override
     public int delete(String id) {

+ 0 - 1
src/main/java/com/hz/employmentsite/services/service/companyService/PostService.java

@@ -10,7 +10,6 @@ public interface PostService {
     PageInfo<RecommendPostVo> getCommendPostList(Integer page, Integer rows, String jobUserID);
     Integer saveCommendPost(RecommendPostVo data, String userId);
     int save(PostVo data, String userId);
-    int savePostList(List<PostVo> data, String userId);
     int delete(String id);
     PostVo getDataById(String id);
     List<PcPost> getDataListByCompanyId(String companyID);

+ 49 - 518
src/main/java/com/hz/employmentsite/util/datarange/DataRangeInterceptor.java

@@ -16,6 +16,7 @@ import org.apache.ibatis.plugin.Invocation;
 import org.apache.ibatis.plugin.Signature;
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
+
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -74,17 +75,11 @@ public class DataRangeInterceptor implements Interceptor {
         } else {
             String whereClause = "";
             try {
-                Integer userTypeID = this.accountService.getLoginUserTypeID();
-                //1 求职者 2企业人员 3驿站工作者 4驿站机构人员 5区级管理员 6市级管理员
-                if (userTypeID == 3 || userTypeID == 4) {
-                    whereClause = getJoinSqlBySiteUser(entityClass,userTypeID);
-                }else{
-                    DataRange dataRange = this.dataRangeUtils.getCurrentRange();
-                    if (dataRange == null || dataRange.getRange() == DataRangeEnum.ALL) {
-                        return invocation.proceed();
-                    }
-                    whereClause = getJoinSql(entityClass, dataRange);
+                DataRange dataRange = this.dataRangeUtils.getCurrentRange();
+                if (dataRange == null || dataRange.getRange() == DataRangeEnum.ALL.getValue()) {
+                    return invocation.proceed();
                 }
+                whereClause = getJoinSql(entityClass, dataRange);
 
                 if (!whereClause.equals("")) {
                     mainSql = "select x.* from" +
@@ -97,165 +92,52 @@ public class DataRangeInterceptor implements Interceptor {
             }
 
         }
-        return executor.query(ms, parameter, rowBounds, resultHandler, cacheKey, boundSql);
-    }
-
-    private String getJoinSql(Class entityClass, DataRange dataRange) {
-        Field institutionIDField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(InstitutionID.class).length > 0)
-                .findFirst().orElse(null);
-        if (institutionIDField != null) {
-            return this.getJoinSqlByInstitution(institutionIDField, dataRange);
-        }
-        Field siteIDField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(SiteID.class).length > 0)
-                .findFirst().orElse(null);
-        if (siteIDField != null) {
-            return this.getJoinSqlBySite(siteIDField, dataRange);
-        }
-        Field siteUserField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(SiteUserID.class).length > 0)
-                .findFirst().orElse(null);
-        if (siteUserField != null) {
-            return this.getJoinSqlBySiteUser(siteUserField, dataRange);
-        }
-        Field companyIDField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(CompanyID.class).length > 0)
-                .findFirst().orElse(null);
-        if (companyIDField != null) {
-            return this.getJoinSqlByCompany(companyIDField, dataRange);
-        }
-        Field postIDField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(PostID.class).length > 0)
-                .findFirst().orElse(null);
-        if (postIDField != null) {
-            return this.getJoinSqlByPost(postIDField, dataRange);
-        }
-        Field jobUserIDField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(JobUserID.class).length > 0)
-                .findFirst().orElse(null);
-        if (jobUserIDField != null) {
-            return this.getJoinSqlByJobUser(jobUserIDField, dataRange);
-        }
-        Field JobHuntIDField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(JobHuntID.class).length > 0)
-                .findFirst().orElse(null);
-        if (JobHuntIDField != null) {
-            return this.getJoinSqlByJobHunt(JobHuntIDField, dataRange);
-        }
-        Field workIDField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(DoWorkID.class).length > 0)
-                .findFirst().orElse(null);
-        if (workIDField != null) {
-            return this.getJoinSqlByLog(workIDField, dataRange);
-        }
-        Field taskIDField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(DoTaskID.class).length > 0)
-                .findFirst().orElse(null);
-        if (taskIDField != null) {
-            return this.getJoinSqlByTask(taskIDField, dataRange);
-        }
-        return "";
-    }
-
-    private String getJoinSqlBySiteUser(Class entityClass,Integer userTypeID) {
-
-        Field sysUserField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(UserID.class).length > 0)
-                .findFirst().orElse(null);
-        if (sysUserField != null) {
-            return  "inner join sys_user sysUser on  x." + sysUserField.getName() + "= sysUser.UserID " +
-                    "where sysUser.UserID='" + accountService.getLoginUserID() + "'";
-        }
-
-        Field institutionField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(InstitutionID.class).length > 0)
-                .findFirst().orElse(null);
-        if (institutionField != null) {
-            return  "inner join pc_site_institution st on  x." + institutionField.getName() + "= st.InstitutionID " +
-                    "inner join pc_site_user siteUser on st.SiteID = siteUser.SiteID " +
-                    "where siteUser.UserID = '" + accountService.getLoginUserID() + "'";
-        }
-
-        Field siteField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(SiteID.class).length > 0)
-                .findFirst().orElse(null);
-        if (siteField != null) {
-            return  "inner join pc_site_user siteUser on  x." + siteField.getName() + "= siteUser.SiteID " +
-                    "where siteUser.UserID='" + accountService.getLoginUserID() + "'";
-        }
-
-        Field siteUserField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(SiteUserID.class).length > 0)
-                .findFirst().orElse(null);
-        Field workLogField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(DoWorkID.class).length > 0)
-                .findFirst().orElse(null);
-        Field workTaskField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(DoTaskID.class).length > 0)
-                .findFirst().orElse(null);
-
-        if(userTypeID ==3){
-            //驿站工作者只能查询自己
-            if (siteUserField != null) {
-                return  "inner join pc_site_user siteUser on  x." + siteUserField.getName() + "= siteUser.SiteUserID " +
-                        "where siteUser.UserID='" + accountService.getLoginUserID() + "'";
-            }
-            if (workLogField != null) {
-                return  "inner join pc_dowork doWork on  x." + workLogField.getName() + "= doWork.DoWorkID " +
-                        "inner join pc_site_user siteUser on doWork.SiteUserID = siteUser.SiteUserID " +
-                        "where siteUser.UserID='" + accountService.getLoginUserID() + "'";
-            }
-            if (workTaskField != null) {
-                return  "inner join pc_dotask_user taskUser on  x." + workTaskField.getName() + "= taskUser.DoTaskID " +
-                        "inner join pc_site_user siteUser on taskUser.SiteUserID = siteUser.SiteUserID " +
-                        "where siteUser.UserID='" + accountService.getLoginUserID() + "'";
-            }
-        }else{
-            //驿站机构人员可以查询驿站内所有人员
-            if (siteUserField != null) {
-                return  " where x." + siteUserField.getName() + " in (" +
-                        " select siteUser.SiteUserID from pc_site_user siteUser where siteUser.SiteID in (" +
-                        " select theSiteUser.SiteID  from pc_site_user theSiteUser"+
-                        " where  theSiteUser.UserID='" + accountService.getLoginUserID() + "'))";
-
-            }
-            if (workLogField != null) {
-                return  " where x." + workLogField.getName() + " in (" +
-                        " select doWork.DoWorkID from pc_dowork doWork where doWork.SiteUserID in (" +
-                        " select siteUser.SiteUserID from pc_site_user siteUser where siteUser.SiteID in (" +
-                        " select theSiteUser.SiteID  from pc_site_user theSiteUser"+
-                        " where  theSiteUser.UserID='" + accountService.getLoginUserID() + "')))";
-            }
-            if (workTaskField != null) {
-                return  " where x." + workTaskField.getName() + " in (" +
-                        " select taskUser.DoTaskID from pc_dotask_user taskUser where taskUser.SiteUserID in (" +
-                        " select siteUser.SiteUserID from pc_site_user siteUser where siteUser.SiteID in (" +
-                        " select theSiteUser.SiteID  from pc_site_user theSiteUser"+
-                        " where  theSiteUser.UserID='" + accountService.getLoginUserID() + "')))";
-            }
-        }
-
-        Field companyField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(CompanyID.class).length > 0)
-                .findFirst().orElse(null);
-        if (companyField != null) {
-            return  "inner join pc_company company on  x." + companyField.getName() + "= company.CompanyID " +
-                    "inner join pc_site_user siteUser on company.SiteID = siteUser.SiteID " +
-                    "where siteUser.UserID='" + accountService.getLoginUserID() + "'";
+        try{
+            return executor.query(ms, parameter, rowBounds, resultHandler, cacheKey, boundSql);
         }
-
-        Field postField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(PostID.class).length > 0)
-                .findFirst().orElse(null);
-        if (postField != null) {
-            return  "inner join pc_post post on  x." + postField.getName() + "= post.PostID " +
-                    "inner join pc_company company on post.CompanyID = company.CompanyID " +
-                    "inner join pc_site_user siteUser on company.SiteID = siteUser.SiteID " +
-                    "where siteUser.UserID='" + accountService.getLoginUserID() + "'";
+        catch (Exception ex){
+            return invocation.proceed();
         }
 
-        Field jobUserField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(JobUserID.class).length > 0)
-                .findFirst().orElse(null);
-        if (jobUserField != null) {
-            return  "inner join pc_jobuser jobUser on  x." + jobUserField.getName() + "= jobUser.JobUserID " +
-                    "inner join pc_site_user siteUser on jobUser.SiteID = siteUser.SiteID " +
-                    "where siteUser.UserID='" + accountService.getLoginUserID() + "'";
-        }
+    }
 
-        Field jobHuntField = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(JobHuntID.class).length > 0)
-                .findFirst().orElse(null);
-        if (jobHuntField != null) {
-            return  "inner join pc_jobhunt jobHunt on  x." + jobHuntField.getName() + "= jobHunt.JobHuntID " +
-                    "inner join pc_jobuser jobUser on jobHunt.JobUserID = jobUser.JobUserID " +
-                    "inner join pc_site_user siteUser on jobUser.SiteID = siteUser.SiteID " +
-                    "where siteUser.UserID='" + accountService.getLoginUserID() + "'";
-        }
+    private String getJoinSql(Class entityClass, DataRange dataRange) {
+        return getJoinSqlByField(getField(entityClass, dataRange), dataRange);
+    }
 
-        return "";
+    private Field getField(Class entityClass, DataRange dataRange) {
+        Field field = null;
+
+        DataRangeEnum dataRangeEnum = DataRangeEnum.getDataRangeByValue(dataRange.getRange());
+
+        switch (dataRangeEnum) {
+            case City:
+                break;
+            case Region:
+                field = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(RegionID.class).length > 0)
+                        .findFirst().orElse(null);
+                break;
+            case Institution:
+                field = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(InstitutionID.class).length > 0)
+                        .findFirst().orElse(null);
+                break;
+            case Site:
+                field = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(SiteID.class).length > 0)
+                        .findFirst().orElse(null);
+                break;
+            case Company:
+                field = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(CompanyID.class).length > 0)
+                        .findFirst().orElse(null);
+                break;
+            case SELF:
+                field = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(SiteID.class).length > 0)
+                        .findFirst().orElse(null);
+                break;
+            default:
+                break;
+        }
+
+        return field;
     }
 
     private String getInStatement(List<String> rangeIDList) {
@@ -270,364 +152,13 @@ public class DataRangeInterceptor implements Interceptor {
     }
 
 
-    //运营机构数据筛选
-    private String getJoinSqlByInstitution(Field keyField, DataRange dataRange) {
-        String keyFieldName = keyField.getName();
-        String inStatement = getInStatement(dataRange.getRangeIDList());
-        if (!inStatement.trim().equals("")) {
-            switch (dataRange.getRange()) {
-                case DataRangeEnum.City:
-                case DataRangeEnum.Region:
-                    return  " where 1=1";
-                case DataRangeEnum.Institution:
-                    return  " where x." + keyFieldName + "in (" +  inStatement + ")" ;
-                case DataRangeEnum.Company:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select siteInst.InstitutionID from pc_site_institution siteInst where siteInst.SiteID in (" +
-                            " select company.SiteID from pc_company company" +
-                            " where  company.CompanyID in (" + inStatement + "))" +
-                            ")";
-                case DataRangeEnum.Site:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select siteInst.InstitutionID from pc_site_institution"+
-                            " where  siteInst.SiteID in (" + inStatement + ")" +
-                            ")";
-                case DataRangeEnum.SELF:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select siteInst.InstitutionID from pc_site_institution siteInst where siteInst.SiteID in (" +
-                            " select siteUser.SiteID from pc_site_user siteUser" +
-                            " where  siteUser.UserID in (" + inStatement + "))" +
-                            ")";
-                default:
-                    return "";
-            }
-        } else {
-            return "where 1=1";
-        }
-    }
-    //驿站站点数据筛选
-    private String getJoinSqlBySite(Field keyField, DataRange dataRange) {
-        String keyFieldName = keyField.getName();
-        String inStatement = getInStatement(dataRange.getRangeIDList());
-        if (!inStatement.trim().equals("")) {
-            switch (dataRange.getRange()) {
-                case DataRangeEnum.City:
-                case DataRangeEnum.Region:
-                    return  " where 1=1";
-                case DataRangeEnum.Institution:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select siteInst.SiteID from pc_site_institution siteInst"+
-                            " where  siteInst.InstitutionID in (" + inStatement + ")" +
-                            ")";
-                case DataRangeEnum.Company:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select company.SiteID from pc_company company"+
-                            " where  company.CompanyID in (" + inStatement + ")" +
-                            ")";
-                case DataRangeEnum.Site:
-                    return  " where x." + keyFieldName + " in (" +  inStatement + ")" ;
-                case DataRangeEnum.SELF:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select siteUser.SiteID from pc_site_user siteUser"+
-                            " where  siteUser.UserID in (" + inStatement + ")" +
-                            ")";
-                default:
-                    return "";
-            }
-        }else {
+    private String getJoinSqlByField(Field keyField, DataRange dataRange) {
+        if (keyField == null || dataRange.getRangeIDList() == null || dataRange.getRangeIDList().size() == 0)
             return "where 1=1";
-        }
-    }
-    //站点人员数据筛选
-    private String getJoinSqlBySiteUser(Field keyField, DataRange dataRange) {
-        String keyFieldName = keyField.getName();
-        String inStatement = getInStatement(dataRange.getRangeIDList());
-        if (!inStatement.trim().equals("")) {
-            switch (dataRange.getRange()) {
-                case DataRangeEnum.City:
-                case DataRangeEnum.Region:
-                    return  " where 1=1";
-                //若数据范围为机构,则查询属于当前登录人的驿站所属机构下的所有驿站人员信息
-                case DataRangeEnum.Institution:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select siteUser.SiteUserID from pc_site_user siteUser where siteUser.SiteID in (" +
-                            " select siteInst.SiteID from pc_site_institution siteInst" +
-                            " where  siteInst.InstitutionID in (" + inStatement + ")" +
-                            ")";
-                //若数据范围为公司,则查询属于当前登录人的驿站所属公司下的所有驿站人员信息
-                case DataRangeEnum.Company:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select siteUser.SiteUserID from pc_site_user siteUser where siteUser.SiteID in (" +
-                            " select company.SiteID from pc_company company" +
-                            " where  company.CompanyID in (" + inStatement + "))" +
-                            ")";
-                //若数据范围为驿站,则查询属于当前登录人的所属驿站的所有驿站人员信息
-                case DataRangeEnum.Site:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select siteUser.SiteUserID from pc_site_user siteUser" +
-                            " where  siteUser.SiteID in (" + inStatement + ")" +
-                            ")";
-                //若数据范围为本人,则查询属于当前登录人绑定的驿站人员信息
-                case DataRangeEnum.SELF:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select siteUser.SiteUserID from pc_site_user siteUser" +
-                            " where  siteUser.UserID in (" + inStatement + ")" +
-                            ")";
-                default:
-                    return "";
-            }
-        }else {
-            return "where 1=1";
-        }
-    }
 
-
-
-    //公司信息数据筛选
-    private String getJoinSqlByCompany(Field keyField, DataRange dataRange) {
         String keyFieldName = keyField.getName();
         String inStatement = getInStatement(dataRange.getRangeIDList());
-        if (!inStatement.trim().equals("")) {
-            switch (dataRange.getRange()) {
-                case DataRangeEnum.City:
-                case DataRangeEnum.Region:
-                    return  " where 1=1";
-                case DataRangeEnum.Institution:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select company.CompanyID from pc_company company where company.SiteID in (" +
-                            " select siteInst.SiteID from pc_site_institution siteInst "+
-                            " where  siteInst.InstitutionID in (" +  inStatement + "))" +
-                            ")";
-                case DataRangeEnum.Company:
-                    return  " where x." + keyFieldName + "in (" +  inStatement + ")" ;
-                case DataRangeEnum.Site:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select company.CompanyID from pc_company company " +
-                            " where  company.SiteID in (" + inStatement + ")" +
-                            ")";
-                case DataRangeEnum.SELF:
-                    return " where x." + keyFieldName + " in (" +
-                            " select company.CompanyID from pc_company company where company.SiteID in (" +
-                            " select siteUser.SiteID from pc_site_user siteUser"+
-                            " where  siteUser.UserID in (" + inStatement + ")" +
-                            ")";
-                default:
-                    return "";
-            }
-        }else {
-            return "where 1=1";
-        }
-    }
-    //岗位信息数据筛选
-    private String getJoinSqlByPost(Field keyField, DataRange dataRange) {
-        String keyFieldName = keyField.getName();
-        String inStatement = getInStatement(dataRange.getRangeIDList());
-        if (!inStatement.trim().equals("")) {
-            switch (dataRange.getRange()) {
-                case DataRangeEnum.Region:
-                case DataRangeEnum.City:
-                    return  " where 1=1";
-                case DataRangeEnum.Institution:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select post.PostID from pc_post post where post.CompanyID in (" +
-                            " select company.CompanyID from pc_company company where company.SiteID in ("+
-                            " select siteInst.SiteID from pc_site_institution siteInst "+
-                            " where  siteInst.InstitutionID in ("+ inStatement + ")))" +
-                            ")";
-                case DataRangeEnum.Site:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select post.PostID from pc_post post where post.CompanyID in (" +
-                            " select company.CompanyID from pc_company company"+
-                            " where  company.SiteID in (" + inStatement + "))" +
-                            ")";
-                case DataRangeEnum.Company:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select post.PostID from pc_post post" +
-                            " where  post.CompanyID in (" + inStatement + ")))" +
-                            ")";
-                case DataRangeEnum.SELF:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select post.PostID from pc_post post where post.CompanyID in (" +
-                            " select company.CompanyID from pc_company company where company.SiteID in (" +
-                            " select siteUser.SiteID from pc_site_user siteUser" +
-                            " where  siteUser.UserID in (" + inStatement + ")))" +
-                            ")";
-                default:
-                    return "";
-            }
-        } else {
-            return "where 1=1";
-        }
-    }
-
 
-    //求职人员信息数据筛选
-    private String getJoinSqlByJobUser(Field keyField, DataRange dataRange) {
-        String keyFieldName = keyField.getName();
-        String inStatement = getInStatement(dataRange.getRangeIDList());
-        if (!inStatement.trim().equals("")) {
-            switch (dataRange.getRange()) {
-                case DataRangeEnum.City:
-                case DataRangeEnum.Region:
-                    return  " where 1=1";
-                case DataRangeEnum.Institution:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select jobUser.JobUserID from pc_jobuser jobUser where jobUser.SiteID in (" +
-                            " select siteInst.SiteID from pc_site_institution siteInst "+
-                            " where  siteInst.InstitutionID in (" +  inStatement + "))" +
-                            ")";
-                case DataRangeEnum.Company:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select jobUser.JobUserID from pc_jobuser jobUser where jobUser.SiteID in (" +
-                            " select company.SiteID from pc_company company "+
-                            " where  company.CompanyID in (" +  inStatement + "))" +
-                            ")";
-                case DataRangeEnum.Site:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select jobUser.JobUserID from pc_jobuser jobUser" +
-                            " where  jobUser.SiteID in (" + inStatement + ")" +
-                            ")";
-                case DataRangeEnum.SELF:
-                    return " where x." + keyFieldName + " in (" +
-                            " select jobUser.JobUserID from pc_jobuser jobUser where jobUser.siteID in (" +
-                            " select siteUser.SiteID from pc_site_user siteUser"+
-                            " where  siteUser.UserID in (" + inStatement + "))" +
-                            ")";
-                default:
-                    return "";
-            }
-        }else {
-            return "where 1=1";
-        }
-    }
-    //求职意向信息数据筛选
-    private String getJoinSqlByJobHunt(Field keyField, DataRange dataRange) {
-        String keyFieldName = keyField.getName();
-        String inStatement = getInStatement(dataRange.getRangeIDList());
-        if (!inStatement.trim().equals("")) {
-            switch (dataRange.getRange()) {
-                case DataRangeEnum.City:
-                case DataRangeEnum.Region:
-                    return  " where 1=1";
-                case DataRangeEnum.Institution:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select jobHunt.JobHuntID from pc_jobhunt jobHunt where jobHunt.JobUserID in (" +
-                            " select jobUser.JobUserID from pc_jobuser jobUser where jobUser.siteID in (" +
-                            " select siteInst.SiteID from pc_site_institution siteInst "+
-                            " where  siteInst.InstitutionID in (" +  inStatement + ")))" +
-                            ")";
-                case DataRangeEnum.Company:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select jobHunt.JobHuntID from pc_jobhunt jobHunt where jobHunt.JobUserID in (" +
-                            " select jobUser.JobUserID from pc_jobuser jobUser where jobUser.SiteID in (" +
-                            " select company.SiteID from pc_company company "+
-                            " where  company.CompanyID in (" +  inStatement + ")))" +
-                            ")";
-                case DataRangeEnum.Site:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select jobHunt.JobHuntID from pc_jobhunt jobHunt where jobHunt.JobUserID in (" +
-                            " select jobUser.JobUserID from pc_jobuser jobUser" +
-                            " where  jobUser.SiteID in (" + inStatement + "))" +
-                            ")";
-                case DataRangeEnum.SELF:
-                    return " where x." + keyFieldName + " in (" +
-                            " select jobHunt.JobHuntID from pc_jobhunt jobHunt where jobHunt.JobUserID in (" +
-                            " select jobUser.JobUserID from pc_jobuser jobUser where jobUser.siteID in (" +
-                            " select siteUser.SiteID from pc_site_user siteUser"+
-                            " where  siteUser.UserID in (" + inStatement + ")))" +
-                            ")";
-                default:
-                    return "";
-            }
-        }else {
-            return "where 1=1";
-        }
-    }
-
-
-
-    //工作日志数据筛选
-    private String getJoinSqlByLog(Field keyField, DataRange dataRange) {
-        String keyFieldName = keyField.getName();
-        String inStatement = getInStatement(dataRange.getRangeIDList());
-        if (!inStatement.trim().equals("")) {
-            switch (dataRange.getRange()) {
-                case DataRangeEnum.City:
-                case DataRangeEnum.Region:
-                    return  " where 1=1";
-                case DataRangeEnum.Institution:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select workLog.DoWorkID from pc_dowork workLog where workLog.SiteUserID in (" +
-                            " select siteUser.SiteUserID from pc_site_user siteUser where siteUser.SiteID in (" +
-                            " select siteInst.SiteID from pc_site_institution siteInst" +
-                            " where  siteInst.InstitutionID in (" + inStatement + ")))" +
-                            ")";
-                case DataRangeEnum.Company:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select workLog.DoWorkID from pc_dowork workLog where workLog.SiteUserID in (" +
-                            " select siteUser.SiteUserID from pc_site_user siteUser where siteUser.SiteID in (" +
-                            " select company.SiteID from pc_company company" +
-                            " where  company.CompanyID in (" + inStatement + ")))" +
-                            ")";
-                case DataRangeEnum.Site:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select workLog.DoWorkID from pc_dowork workLog where workLog.SiteUserID in (" +
-                            " select siteUser.SiteUserID from pc_site_user siteUser "+
-                            " where  siteUser.SiteID in (" + inStatement + "))" +
-                            ")";
-                case DataRangeEnum.SELF:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select workLog.DoWorkID from pc_dowork workLog where workLog.SiteUserID in (" +
-                            " select siteUser.SiteUserID from pc_site_user siteUser "+
-                            " where  siteUser.UserID in (" + inStatement + "))" +
-                            ")";
-                default:
-                    return "";
-            }
-        } else {
-            return "where 1=1";
-        }
-    }
-    //工作任务数据筛选
-    private String getJoinSqlByTask(Field keyField, DataRange dataRange) {
-        String keyFieldName = keyField.getName();
-        String inStatement = getInStatement(dataRange.getRangeIDList());
-        if (!inStatement.trim().equals("")) {
-            switch (dataRange.getRange()) {
-                case DataRangeEnum.City:
-                case DataRangeEnum.Region:
-                    return " where 1=1";
-                case DataRangeEnum.Institution:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select taskUser.DoTaskID from pc_dotask_user taskUser where taskUser.SiteUserID in ("+
-                            " select siteUser.SiteUserID from pc_site_user siteUser where siteUser.SiteID in ("+
-                            " select siteInst.SiteID from pc_site_institution siteInst"+
-                            " where  siteInst.InstitutionID in ("+ inStatement + ")))" +
-                            ")";
-                case DataRangeEnum.Site:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select taskUser.DoTaskID from pc_dotask_user taskUser where  taskUser.SiteUserID in ("+
-                            " select siteUser.SiteUserID from pc_site_user siteUser"+
-                            " where  siteUser.SiteID in ("+ inStatement + ")))" +
-                            ")";
-                case DataRangeEnum.Company:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select taskUser.DoTaskID from pc_dotask_user taskUser where  taskUser.SiteUserID in ("+
-                            " select siteUser.SiteUserID from pc_site_user siteUser where  siteUser.SiteID in ("+
-                            " select company.SiteID from pc_company company"+
-                            " where  company.CompanyID in ("+ inStatement + ")))" +
-                            ")";
-                case DataRangeEnum.SELF:
-                    return  " where x." + keyFieldName + " in (" +
-                            " select taskUser.DoTaskID from pc_dotask_user taskUser where  taskUser.SiteUserID in (" +
-                            " select siteUser.SiteUserID from pc_site_user siteUser "+
-                            " where  siteUser.UserID in (" + inStatement + "))" +
-                            ")";
-                default:
-                    return "";
-            }
-        } else {
-            return "where 1=1";
-        }
+        return " where x." + keyFieldName + " in (" + inStatement + ")";
     }
 }

+ 9 - 0
src/main/java/com/hz/employmentsite/util/datarange/annotations/RegionID.java

@@ -0,0 +1,9 @@
+package com.hz.employmentsite.util.datarange.annotations;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface RegionID {
+}

+ 4 - 0
src/main/java/com/hz/employmentsite/vo/baseSettings/SiteInfoVo.java

@@ -1,5 +1,7 @@
 package com.hz.employmentsite.vo.baseSettings;
 
+import com.hz.employmentsite.util.datarange.annotations.InstitutionID;
+import com.hz.employmentsite.util.datarange.annotations.RegionID;
 import lombok.Data;
 import java.sql.Date;
 import java.util.List;
@@ -12,6 +14,7 @@ public class SiteInfoVo {
     public String siteID;
 
     public String siteCode;
+    @RegionID
     public String regionCode;
     public String regionName;
     public String streetCode;
@@ -26,6 +29,7 @@ public class SiteInfoVo {
     public String fzrMobile;
 
     public String siteInstitutionID;
+    @InstitutionID
     public String institutionID;
     public String institutionName;
     public List<SiteUserVo> manageUsers;

+ 7 - 0
src/main/java/com/hz/employmentsite/vo/baseSettings/SiteUserVo.java

@@ -1,5 +1,7 @@
 package com.hz.employmentsite.vo.baseSettings;
 
+import com.hz.employmentsite.util.datarange.annotations.InstitutionID;
+import com.hz.employmentsite.util.datarange.annotations.RegionID;
 import lombok.Data;
 import java.sql.Date;
 import com.hz.employmentsite.util.datarange.annotations.SiteUserID;
@@ -12,6 +14,7 @@ public class SiteUserVo {
     public String siteUserID;
 
     public String siteUserName;
+    @SiteID
     public String siteID;
     public String siteName;
     public String mobile;
@@ -27,5 +30,9 @@ public class SiteUserVo {
     public Date createTime;
     public String updateBy;
     public Date updateTime;
+    @InstitutionID
+    public String institutionID;
+    @RegionID
+    public String regionCode;
 
 }

+ 7 - 0
src/main/java/com/hz/employmentsite/vo/companyService/CompanyVo.java

@@ -1,5 +1,8 @@
 package com.hz.employmentsite.vo.companyService;
 
+import com.hz.employmentsite.util.datarange.annotations.InstitutionID;
+import com.hz.employmentsite.util.datarange.annotations.RegionID;
+import com.hz.employmentsite.util.datarange.annotations.SiteID;
 import lombok.Data;
 import com.hz.employmentsite.util.datarange.annotations.CompanyID;
 import java.util.Date;
@@ -10,8 +13,10 @@ public class CompanyVo {
     @CompanyID
     public String companyID;
 
+    @SiteID
     public String siteID;
 
+    @RegionID
     public String regionCode;
 
     public String streetCode;
@@ -76,5 +81,7 @@ public class CompanyVo {
 
     public Integer isShortage;
     public String  isShortageName;
+    @InstitutionID
+    public String institutionID;
 
 }

+ 47 - 28
src/main/resources/mapping/PcPostMapper.xml

@@ -3,6 +3,7 @@
 <mapper namespace="com.hz.employmentsite.mapper.PcPostMapper">
   <resultMap id="BaseResultMap" type="com.hz.employmentsite.model.PcPost">
     <id column="PostID" jdbcType="VARCHAR" property="postID" />
+    <result column="ProfessionID" jdbcType="VARCHAR" property="professionID" />
     <result column="WorkCode" jdbcType="VARCHAR" property="workCode" />
     <result column="WorkName" jdbcType="VARCHAR" property="workName" />
     <result column="RecruitCount" jdbcType="INTEGER" property="recruitCount" />
@@ -95,10 +96,11 @@
     </where>
   </sql>
   <sql id="Base_Column_List">
-    PostID, WorkCode, WorkName, RecruitCount, CompanyID, PostName, RecordStatus, WorkNature, 
-    ValidDay, WorkYear, CultureRank, MaxSalary, MinSalary, Welfare, UserName, UserMobile, 
-    PostEmail, WorkTime, IsTrail, TrailMonths, TrailMaxSalary, TrailMinSalary, CreateUserID, 
-    CreateTime, ModifyUserID, ModifyTime, ValidTime, StartTime, EndTime, JobPlace
+    PostID, ProfessionID, WorkCode, WorkName, RecruitCount, CompanyID, PostName, RecordStatus, 
+    WorkNature, ValidDay, WorkYear, CultureRank, MaxSalary, MinSalary, Welfare, UserName, 
+    UserMobile, PostEmail, WorkTime, IsTrail, TrailMonths, TrailMaxSalary, TrailMinSalary, 
+    CreateUserID, CreateTime, ModifyUserID, ModifyTime, ValidTime, StartTime, EndTime, 
+    JobPlace
   </sql>
   <sql id="Blob_Column_List">
     PostDesc
@@ -152,28 +154,28 @@
     </if>
   </delete>
   <insert id="insert" parameterType="com.hz.employmentsite.model.PcPost">
-    insert into pc_post (PostID, WorkCode, WorkName, 
-      RecruitCount, CompanyID, PostName, 
-      RecordStatus, WorkNature, ValidDay, 
-      WorkYear, CultureRank, MaxSalary, 
-      MinSalary, Welfare, UserName, 
-      UserMobile, PostEmail, WorkTime, 
-      IsTrail, TrailMonths, TrailMaxSalary, 
-      TrailMinSalary, CreateUserID, CreateTime, 
-      ModifyUserID, ModifyTime, ValidTime, 
-      StartTime, EndTime, JobPlace, 
-      PostDesc)
-    values (#{postID,jdbcType=VARCHAR}, #{workCode,jdbcType=VARCHAR}, #{workName,jdbcType=VARCHAR}, 
-      #{recruitCount,jdbcType=INTEGER}, #{companyID,jdbcType=VARCHAR}, #{postName,jdbcType=VARCHAR}, 
-      #{recordStatus,jdbcType=INTEGER}, #{workNature,jdbcType=VARCHAR}, #{validDay,jdbcType=INTEGER}, 
-      #{workYear,jdbcType=INTEGER}, #{cultureRank,jdbcType=INTEGER}, #{maxSalary,jdbcType=DECIMAL}, 
-      #{minSalary,jdbcType=DECIMAL}, #{welfare,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, 
-      #{userMobile,jdbcType=VARCHAR}, #{postEmail,jdbcType=VARCHAR}, #{workTime,jdbcType=INTEGER}, 
-      #{isTrail,jdbcType=BIT}, #{trailMonths,jdbcType=INTEGER}, #{trailMaxSalary,jdbcType=DECIMAL}, 
-      #{trailMinSalary,jdbcType=DECIMAL}, #{createUserID,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
-      #{modifyUserID,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP}, #{validTime,jdbcType=TIMESTAMP}, 
-      #{startTime,jdbcType=TIMESTAMP}, #{endTime,jdbcType=TIMESTAMP}, #{jobPlace,jdbcType=VARCHAR}, 
-      #{postDesc,jdbcType=LONGVARCHAR})
+    insert into pc_post (PostID, ProfessionID, WorkCode, 
+      WorkName, RecruitCount, CompanyID, 
+      PostName, RecordStatus, WorkNature, 
+      ValidDay, WorkYear, CultureRank, 
+      MaxSalary, MinSalary, Welfare, 
+      UserName, UserMobile, PostEmail, 
+      WorkTime, IsTrail, TrailMonths, 
+      TrailMaxSalary, TrailMinSalary, CreateUserID, 
+      CreateTime, ModifyUserID, ModifyTime, 
+      ValidTime, StartTime, EndTime, 
+      JobPlace, PostDesc)
+    values (#{postID,jdbcType=VARCHAR}, #{professionID,jdbcType=VARCHAR}, #{workCode,jdbcType=VARCHAR}, 
+      #{workName,jdbcType=VARCHAR}, #{recruitCount,jdbcType=INTEGER}, #{companyID,jdbcType=VARCHAR}, 
+      #{postName,jdbcType=VARCHAR}, #{recordStatus,jdbcType=INTEGER}, #{workNature,jdbcType=VARCHAR}, 
+      #{validDay,jdbcType=INTEGER}, #{workYear,jdbcType=INTEGER}, #{cultureRank,jdbcType=INTEGER}, 
+      #{maxSalary,jdbcType=DECIMAL}, #{minSalary,jdbcType=DECIMAL}, #{welfare,jdbcType=VARCHAR}, 
+      #{userName,jdbcType=VARCHAR}, #{userMobile,jdbcType=VARCHAR}, #{postEmail,jdbcType=VARCHAR}, 
+      #{workTime,jdbcType=INTEGER}, #{isTrail,jdbcType=BIT}, #{trailMonths,jdbcType=INTEGER}, 
+      #{trailMaxSalary,jdbcType=DECIMAL}, #{trailMinSalary,jdbcType=DECIMAL}, #{createUserID,jdbcType=VARCHAR}, 
+      #{createTime,jdbcType=TIMESTAMP}, #{modifyUserID,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP}, 
+      #{validTime,jdbcType=TIMESTAMP}, #{startTime,jdbcType=TIMESTAMP}, #{endTime,jdbcType=TIMESTAMP}, 
+      #{jobPlace,jdbcType=VARCHAR}, #{postDesc,jdbcType=LONGVARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.hz.employmentsite.model.PcPost">
     insert into pc_post
@@ -181,6 +183,9 @@
       <if test="postID != null">
         PostID,
       </if>
+      <if test="professionID != null">
+        ProfessionID,
+      </if>
       <if test="workCode != null">
         WorkCode,
       </if>
@@ -276,6 +281,9 @@
       <if test="postID != null">
         #{postID,jdbcType=VARCHAR},
       </if>
+      <if test="professionID != null">
+        #{professionID,jdbcType=VARCHAR},
+      </if>
       <if test="workCode != null">
         #{workCode,jdbcType=VARCHAR},
       </if>
@@ -380,6 +388,9 @@
       <if test="row.postID != null">
         PostID = #{row.postID,jdbcType=VARCHAR},
       </if>
+      <if test="row.professionID != null">
+        ProfessionID = #{row.professionID,jdbcType=VARCHAR},
+      </if>
       <if test="row.workCode != null">
         WorkCode = #{row.workCode,jdbcType=VARCHAR},
       </if>
@@ -478,6 +489,7 @@
   <update id="updateByExampleWithBLOBs" parameterType="map">
     update pc_post
     set PostID = #{row.postID,jdbcType=VARCHAR},
+      ProfessionID = #{row.professionID,jdbcType=VARCHAR},
       WorkCode = #{row.workCode,jdbcType=VARCHAR},
       WorkName = #{row.workName,jdbcType=VARCHAR},
       RecruitCount = #{row.recruitCount,jdbcType=INTEGER},
@@ -515,6 +527,7 @@
   <update id="updateByExample" parameterType="map">
     update pc_post
     set PostID = #{row.postID,jdbcType=VARCHAR},
+      ProfessionID = #{row.professionID,jdbcType=VARCHAR},
       WorkCode = #{row.workCode,jdbcType=VARCHAR},
       WorkName = #{row.workName,jdbcType=VARCHAR},
       RecruitCount = #{row.recruitCount,jdbcType=INTEGER},
@@ -551,6 +564,9 @@
   <update id="updateByPrimaryKeySelective" parameterType="com.hz.employmentsite.model.PcPost">
     update pc_post
     <set>
+      <if test="professionID != null">
+        ProfessionID = #{professionID,jdbcType=VARCHAR},
+      </if>
       <if test="workCode != null">
         WorkCode = #{workCode,jdbcType=VARCHAR},
       </if>
@@ -646,7 +662,8 @@
   </update>
   <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.hz.employmentsite.model.PcPost">
     update pc_post
-    set WorkCode = #{workCode,jdbcType=VARCHAR},
+    set ProfessionID = #{professionID,jdbcType=VARCHAR},
+      WorkCode = #{workCode,jdbcType=VARCHAR},
       WorkName = #{workName,jdbcType=VARCHAR},
       RecruitCount = #{recruitCount,jdbcType=INTEGER},
       CompanyID = #{companyID,jdbcType=VARCHAR},
@@ -680,7 +697,8 @@
   </update>
   <update id="updateByPrimaryKey" parameterType="com.hz.employmentsite.model.PcPost">
     update pc_post
-    set WorkCode = #{workCode,jdbcType=VARCHAR},
+    set ProfessionID = #{professionID,jdbcType=VARCHAR},
+      WorkCode = #{workCode,jdbcType=VARCHAR},
       WorkName = #{workName,jdbcType=VARCHAR},
       RecruitCount = #{recruitCount,jdbcType=INTEGER},
       CompanyID = #{companyID,jdbcType=VARCHAR},
@@ -711,4 +729,5 @@
       JobPlace = #{jobPlace,jdbcType=VARCHAR}
     where PostID = #{postID,jdbcType=VARCHAR}
   </update>
+
 </mapper>

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

@@ -3,11 +3,16 @@
 <mapper namespace="com.hz.employmentsite.mapper.cquery.CompanyCQuery">
     <select id="getList" resultType="com.hz.employmentsite.vo.companyService.CompanyVo">
         select company.*,city.name as regionName,area.name as streetName,sys_cmodel.Name as companyModelType,
-        (select count(*) from pc_post where CompanyID=company.CompanyID) as postCount,u.`Name` as createUserName from pc_company company
+        (select count(*) from pc_post where CompanyID=company.CompanyID) as postCount,u.`Name` as createUserName
+        ,inSites.InstitutionID as institutionID
+        from pc_company company
         left join sys_user u on u.UserID = company.CreateUserID
         left join (select * from sys_dictionary_item where DictionaryCode ='CompanyModel') sys_cmodel on company.CompanyModel = sys_cmodel.Value
         left join area_code city on company.RegionCode = city.code
         left join area_code area on company.StreetCode = area.code
+        left join pc_site site on company.siteID = site.siteID
+        left join pc_site_institution inSites on site.SiteID = inSites.SiteID
+        left join pc_institution institution on inSites.institutionID = institution.InstitutionID
         where 1=1
         <if test="companyIDList!='' and companyIDList!=null">
             and companyID in (${companyIDList})

+ 5 - 1
src/main/resources/mapping/cquery/SiteUserCQuery.xml

@@ -2,10 +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.UserInfoCQuery">
     <select id="getList" resultType="com.hz.employmentsite.vo.baseSettings.SiteUserVo">
-        select siteUser.*,dic_userRole.Name as RoleName,dic_gender.Name as GenderName,site.SiteName from pc_site_user siteUser
+        select siteUser.*,dic_userRole.Name as RoleName,dic_gender.Name as GenderName,site.SiteName
+        ,inSites.InstitutionID as institutionID,site.regionCode
+        from pc_site_user siteUser
         left join pc_site site on siteUser.siteID = site.siteID
         left join (select * from sys_dictionary_item where DictionaryCode ='UserType' ) dic_userRole  on siteUser.RoleID = dic_userRole.Value
         left join (select * from sys_dictionary_item where DictionaryCode ='Gender' ) dic_gender  on siteUser.Gender = dic_gender.Value
+        left join pc_site_institution inSites on site.SiteID = inSites.SiteID
+        left join pc_institution institution on inSites.institutionID = institution.InstitutionID
         where 1=1
         <if test="siteUserIDList!='' and siteUserIDList!=null">
             and siteUserID in (${siteUserIDList})

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

@@ -71,7 +71,11 @@
     </select>
 
     <select id="selectUserRegion" resultType="java.lang.String">
-        select distinct code from area_code
+        select distinct a.code from area_code a
+        inner join pc_site s on a.code = s.RegionCode
+        inner join pc_site_user su on s.SiteID = su.SiteID
+        inner join sys_user us on su.UserID = us.UserID
+        where us.UserID = #{userID}
     </select>
 
     <select id="selectUserCity" resultType="java.lang.String">

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

@@ -36,9 +36,9 @@ export function save(data: any) {
   })
 }
 
-export  function  savePostList(data:any){
+export  function  savePost(data:any){
   return request({
-    url: 'companyService/post/savePostList',
+    url: 'companyService/post/savePost',
     method: 'post',
     data: data
   }, {

+ 238 - 284
vue/src/views/companyService/post/edit.vue

@@ -1,12 +1,12 @@
 <template>
   <div class="card-edit">
-    <a-form :model="postCompany" autocomplete="off">
+    <a-form :model="dataModel" autocomplete="off" @finish="onFinish">
       <h1>关联企业信息</h1>
       <a-row justify="start" :gutter="24" >
-        <a-col flex="895px">
+        <a-col flex="800px">
           <a-form-item label="企业名称" :label-col="{ span: 3}"
-                       name="companyId" :rules="[{ required: true, message: '请输入企业名称!' }]" >
-            <a-select ref="select" show-search optionFilterProp="label" v-model:value="postCompany.companyId" >
+                       name="companyID" :rules="[{ required: true, message: '请选择关联企业!' }]" >
+            <a-select :disabled="isEdit" ref="select" show-search optionFilterProp="label" v-model:value="dataModel.companyID" >
               <a-select-option v-for="item in companyList" :label="item.companyName" :value="item.companyID"
                                :key="item.companyID">
                 <span>{{ item.companyName }}</span>
@@ -15,274 +15,257 @@
           </a-form-item>
         </a-col>
       </a-row>
-    </a-form>
-    <a-row>
-      <a-col :span="2">
-        <h1>岗位管理</h1>
-      </a-col>
-      <a-col :span="22" style="text-align: right;">
-        <Space>
-          <a-button @click="addPost" v-if="!isEdit">
-            <template #icon>
-              <plus-circle-outlined/>
-            </template>
-            新增
-          </a-button>
-        </Space>
-      </a-col>
-    </a-row>
-    <div v-for="(item,index) in postDataList" style="margin-bottom: 20px;background-color: #f0f0f0" :key="index">
-      <h1>基础信息</h1>
-      <a-form :model="item" autocomplete="off">
-        <a-row :gutter="24"  justify="center">
-          <a-col flex="400px">
-            <a-form-item label="岗位名称" :label-col="{ span: 7 }"
-                         name="postName" :rules="[{ required: true, message: '请输入岗位名称!' }]" >
-              <a-input v-model:value="item.postName" placeholder=""/>
-            </a-form-item>
-          </a-col>
-          <a-col flex="400px">
-            <a-form-item label="招聘人数" :label-col="{ span: 7 }"
-                         name="recruitCount" :rules="[{ required: true, message: '请输入招聘人数!' }]" >
-              <a-input v-model:value="item.recruitCount" placeholder=""/>
-            </a-form-item>
-          </a-col>
-          <a-col flex="315px">
-            <a-form-item label="招聘日期" :label-col="{ span: 9 }"
-                         name="startTime" :rules="[{ required: true, message: '请输入招聘开始时间' }]"  >
-              <a-date-picker  v-model:value="item.startTime" picker="date" value-format="YYYY-MM-DD" />
-            </a-form-item>
-          </a-col>
-          <label style="margin:5px;">至</label>
-          <a-col flex="215px">
-            <a-form-item name="endTime" :rules="[{ required: true, message: '请输入招聘结束时间' }]" >
-              <a-date-picker v-model:value="item.endTime" picker="date" value-format="YYYY-MM-DD" />
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <a-row  justify="center">
-          <a-col  flex="1330px">
-            <a-form-item label="招聘地点" :label-col="{span:2}" name="jobPlace"
-                         :rules="[{ required: true, message: '请输入招聘地点' }]" >
-              <a-textarea v-model:value="item.jobPlace" placeholder="" :rows="4"/>
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <h1>其他信息</h1>
-        <a-row  justify="center">
-          <a-col flex="300px" >
-            <a-form-item
-              label="岗位月薪(元)"
-              name="minSalary"
-              :label-col="{span:9}"
-              :rules="[{ required: false, message: '请输入金额!' }]"
-            >
-              <a-input v-model:value="item.minSalary" placeholder="请输入金额"/>
-            </a-form-item>
-          </a-col>
-          <label style="margin:5px 8px 5px 8px;">至</label>
-          <a-col flex="200px">
-            <a-form-item
-              :label-col="{ span: 6 }"
-              name="maxSalary"
-              :rules="[{ required: false, message: '请输入金额' }]"
+      <h1>岗位基础信息</h1>
+      <a-row justify="start">
+        <a-col flex="520px">
+          <a-form-item label="岗位名称" :label-col="{ span: 5 }"
+                       name="professionName"  :rules="[{ required: true, message: '请选择岗位名称!' }]" >
+            <a-cascader :load-data="loadLevelProfessionList" v-model:value="dataModel.professionName"
+                        :options="firstProfessionList" change-on-select>
+            </a-cascader>
+          </a-form-item>
+        </a-col>
+        <a-col flex="340px">
+          <a-form-item label="招聘人数" :label-col="{ span: 8}"
+                       name="recruitCount" :rules="[{ required: true, message: '请输入招聘人数!' }]" >
+            <a-input v-model:value="dataModel.recruitCount" placeholder=""/>
+          </a-form-item>
+        </a-col>
+        <a-col flex="280px">
+          <a-form-item label="招聘日期" :label-col="{ span: 9 }"
+                       name="startTime" :rules="[{ required: true, message: '请输入招聘开始时间' }]"  >
+            <a-date-picker  v-model:value="dataModel.startTime" picker="date" value-format="YYYY-MM-DD" />
+          </a-form-item>
+        </a-col>
+        <label style="margin:5px;">至</label>
+        <a-col flex="170px">
+          <a-form-item name="endTime" :rules="[{ required: true, message: '请输入招聘结束时间' }]" >
+            <a-date-picker v-model:value="dataModel.endTime" picker="date" value-format="YYYY-MM-DD" />
+          </a-form-item>
+        </a-col>
+      </a-row>
+      <a-row justify="start">
+        <a-col  flex="1330px">
+          <a-form-item label="招聘地点" :label-col="{span:2}" name="jobPlace"
+                       :rules="[{ required: true, message: '请输入招聘地点' }]" >
+            <a-textarea v-model:value="dataModel.jobPlace" placeholder="" :rows="4"/>
+          </a-form-item>
+        </a-col>
+      </a-row>
+      <h1>岗位其他信息</h1>
+      <a-row justify="start">
+        <a-col flex="300px" >
+          <a-form-item
+            label="岗位月薪(元)"
+            name="minSalary"
+            :label-col="{span:9}"
+            :rules="[{ required: false, message: '请输入金额!' }]"
+          >
+            <a-input v-model:value="dataModel.minSalary" placeholder="请输入金额"/>
+          </a-form-item>
+        </a-col>
+        <label style="margin:5px 8px 5px 8px;">至</label>
+        <a-col flex="200px">
+          <a-form-item
+            :label-col="{ span: 6 }"
+            name="maxSalary"
+            :rules="[{ required: false, message: '请输入金额' }]"
+          >
+            <a-input v-model:value="dataModel.maxSalary" placeholder="请输入金额"/>
+          </a-form-item>
+        </a-col>
+        <a-col flex="400px">
+          <a-form-item
+            label="是否有试用期"
+            :label-col="{ span: 9 }"
+            name="isTrail"
+            :rules="[{ required: false, message: '请选择是否试用期!' }]"
+          >
+            <a-select
+              ref="select"
+              v-model:value="dataModel.isTrail"
+              :options="trialStatusList"
+              :field-names="{ label: 'name', value: 'value' }"
             >
-              <a-input v-model:value="item.maxSalary" placeholder="请输入金额"/>
-            </a-form-item>
-          </a-col>
-          <a-col flex="400px">
-            <a-form-item
-              label="是否有试用期"
-              :label-col="{ span: 9 }"
-              name="isTrail"
-              :rules="[{ required: false, message: '请选择是否试用期!' }]"
+            </a-select>
+          </a-form-item>
+        </a-col>
+        <a-col flex="400px" >
+          <a-form-item
+            label="试用期(月)"
+            :label-col="{ span: 7 }"
+            name="trailMonths"
+            :rules="[{ required: false, message: '请选择试用期时长!' }]"
+          >
+            <a-input v-model:value="dataModel.trailMonths" placeholder=""/>
+          </a-form-item>
+        </a-col>
+      </a-row>
+      <a-row justify="start">
+        <a-col flex="300px">
+          <a-form-item
+            label="试用期月薪(元)"
+            name="trailMaxSalary"
+            :label-col="{span:9}"
+            :rules="[{ required: false, message: '请输入金额!' }]"
+          >
+            <a-input v-model:value="dataModel.trailMaxSalary" placeholder="请输入金额"/>
+          </a-form-item>
+        </a-col>
+        <label style="margin:5px 8px 5px 8px;">至</label>
+        <a-col flex="200px">
+          <a-form-item
+            :label-col="{ span: 6 }"
+            name="trailMinSalary"
+            :rules="[{ required: false, message: '请输入金额' }]"
+          >
+            <a-input v-model:value="dataModel.trailMinSalary" placeholder="请输入金额"/>
+          </a-form-item>
+        </a-col>
+        <a-col flex="400px">
+          <a-form-item
+            label="工作年限要求"
+            :label-col="{ span: 9 }"
+            name="workYear"
+            :rules="[{ required: false, message: '请选择工作年限!' }]"
+          >
+            <a-select
+              ref="select"
+              v-model:value="dataModel.workYear"
+              :options="WorkYearTypeList"
+              :field-names="{ label: 'name', value: 'value' }"
             >
-              <a-select
-                ref="select"
-                v-model:value="item.isTrail"
-                :options="trialStatusList"
-                :field-names="{ label: 'name', value: 'value' }"
-              >
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col flex="400px" >
-            <a-form-item
-              label="试用期(月)"
-              :label-col="{ span: 7 }"
-              name="trailMonths"
-              :rules="[{ required: false, message: '请选择试用期时长!' }]"
+            </a-select>
+          </a-form-item>
+        </a-col>
+        <a-col flex="400px">
+          <a-form-item
+            label="学历要求"
+            :label-col="{ span: 7 }"
+            name="cultureRank"
+            :rules="[{ required: false, message: '请选择试用期时长!' }]"
+          >
+            <a-select
+              ref="select"
+              v-model:value="dataModel.cultureRank"
+              :options="cultureLevelList"
+              :field-names="{ label: 'name', value: 'value' }"
             >
-              <a-input v-model:value="item.trailMonths" placeholder=""/>
-            </a-form-item>
-          </a-col>
-        </a-row>
+            </a-select>
+          </a-form-item>
+        </a-col>
+      </a-row>
+      <a-row justify="start">
+        <a-col flex="1330px">
+          <a-form-item :label-col="{span:2}" name="welfare" label="福利待遇">
+            <a-textarea v-model:value="dataModel.welfare" placeholder="" :rows="4"/>
+          </a-form-item>
+        </a-col>
+      </a-row>
+      <a-row justify="start">
+        <a-col flex="1330px">
+          <a-form-item :label-col="{span:2}" name="postDesc" label="其他要求">
+            <a-textarea v-model:value="dataModel.postDesc" placeholder="" :rows="4"/>
+          </a-form-item>
+        </a-col>
+      </a-row>
+      <a-row >
+        <a-col flex="1330px">
+          <a-form-item class="buttom-btns">
+            <a-button @click="onClose">取消</a-button>
+            <a-button type="primary" html-type="submit">提交</a-button>
+          </a-form-item>
+        </a-col>
+      </a-row>
 
-        <a-row  justify="center">
-          <a-col flex="300px">
-            <a-form-item
-              label="试用期月薪(元)"
-              name="trailMaxSalary"
-              :label-col="{span:9}"
-              :rules="[{ required: false, message: '请输入金额!' }]"
-            >
-              <a-input v-model:value="item.trailMaxSalary" placeholder="请输入金额"/>
-            </a-form-item>
-          </a-col>
-          <label style="margin:5px 8px 5px 8px;">至</label>
-          <a-col flex="200px">
-            <a-form-item
-              :label-col="{ span: 6 }"
-              name="trailMinSalary"
-              :rules="[{ required: false, message: '请输入金额' }]"
-            >
-              <a-input v-model:value="item.trailMinSalary" placeholder="请输入金额"/>
-            </a-form-item>
-          </a-col>
-          <a-col flex="400px">
-            <a-form-item
-              label="工作年限要求"
-              :label-col="{ span: 9 }"
-              name="workYear"
-              :rules="[{ required: false, message: '请选择工作年限!' }]"
-            >
-              <a-select
-                ref="select"
-                v-model:value="item.workYear"
-                :options="WorkYearTypeList"
-                :field-names="{ label: 'name', value: 'value' }"
-              >
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col flex="400px">
-            <a-form-item
-              label="学历要求"
-              :label-col="{ span: 7 }"
-              name="trailtime"
-              :rules="[{ required: false, message: '请选择试用期时长!' }]"
-            >
-              <a-select
-                ref="select"
-                v-model:value="item.cultureRank"
-                :options="cultureLevelList"
-                :field-names="{ label: 'name', value: 'value' }"
-              >
-              </a-select>
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <a-row  justify="center">
-          <a-col flex="1330px">
-            <a-form-item :label-col="{span:2}" name="welfare" label="福利待遇">
-              <a-textarea v-model:value="item.welfare" placeholder="" :rows="4"/>
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <a-row  justify="center">
-          <a-col flex="1330px">
-            <a-form-item :label-col="{span:2}" name="postDesc" label="其他要求">
-              <a-textarea v-model:value="item.postDesc" placeholder="" :rows="4"/>
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <a-row v-if="!isEdit">
-          <a-col style="text-align: right;" :span="23">
-            <a-button type="danger" @click="delPostItem(index)">删除</a-button>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-    <a-form-item class="buttom-btns">
-      <a-button @click="onClose">取消</a-button>
-      <a-button type="primary" @click="onFinish">提交</a-button>
-    </a-form-item>
+    </a-form>
   </div>
 </template>
 
 <script lang="ts">
-import {defineComponent, reactive, ref} from 'vue';
+import {defineComponent, reactive, ref, toRefs} from 'vue';
 import {useRouter} from 'vue-router';
-import {savePostList, getPostByID} from '@/api/companyService/post';
-import {getCompanyById} from '@/api/companyService/company'
-import type {SelectProps} from 'ant-design-vue';
-import {message} from 'ant-design-vue';
+import {savePost, getPostByID} from '@/api/companyService/post';
+import type {CascaderProps,SelectProps} from 'ant-design-vue';
 import {useTabsViewStore} from '@/store/modules/tabsView';
 import BUploadFile from '@/components/file/uploadFile.vue';
 import {get} from '@/api/common';
+import {message} from "ant-design-vue";
 
 interface postModel {
-  postName: string | null,
-  recruitCount: number | null,
-  startTime: string | null,
-  endTime: string | null,
-  jobPlace: string | null,
-  maxSalary: number | null,
-  minSalary: number | null,
-  userName: string,
-  userMobile: string | null,
-  postEmail: string | null,
-  isTrail: number | null,
-  trailMonths: string | null,
-  trailMaxSalary: number | null,
-  trailMinSalary: number | null,
-  workYear: number | null,
-  cultureRank: number | null,
-  welfare: string | null,
-  postDesc: string | null,
-  companyID: string | null,
-  recordStatus: number | null,
+  dataModel: any;
 }
 
-interface companyModel {
-  companyId: string | null,
-  userName: string | null,
-  userMobile: string | null,
-  companyEmail: string | null,
-}
 
 export default defineComponent(
   {
     name: 'PostEdit',
     components: {BUploadFile},
     setup() {
-      const postCompany = reactive<companyModel>({companyId: null,userName: null,userMobile: null,companyEmail: null},);
+      const postCompany = reactive<postModel>({dataModel:{}});
       const router = useRouter();
+
       const fullpath = router.currentRoute.value.fullPath;
       const tabsViewStore = useTabsViewStore();
-      const isEdit = ref(false);
+      const isEdit = ref<boolean>(false);
 
       const cultureLevelList = ref<SelectProps['options']>();
       const WorkYearTypeList = ref<SelectProps['options']>();
       const companyList = ref<SelectProps['options']>();
       const postStatusList = [{name: '启用', value: 1}, {name: '停用', value: 0}];
       const trialStatusList = [{name: '是', value: true}, {name: '否', value: false}];
-      const postDataList = ref<postModel[]>([]);
-      const addPost = () => {
-        (postDataList.value as any[]).push({
-          postName: '',
-          recruitCount: null,
-          startTime: null,
-          endTime: null,
-          jobPlace: null,
-          maxSalary: null,
-          minSalary: null,
-          isTrail: null,
-          trailtime: null,
-          trailMaxSalary: null,
-          trailMinSalary: null,
-          workYear: null,
-          cultureRank: null,
-          welfare: null,
-          postDesc: null,
-          companyID: null
-        });
-      }
+      const firstProfessionList = ref<CascaderProps['options']>([]);
 
-      const delPostItem = (index) => {
-        (postDataList.value as any[]).splice(index, 1);
+      const getFirstProfessionList = () => {
+        get("profession/getFirstProfessionList", null).then(data=>{
+          firstProfessionList.value = (data as any[]).map((x) => {
+            return {
+              label: x.name,
+              value: x.code,
+              isLeaf: false,
+              tag: 'firstLevel'
+            }
+          });
+        });
       }
-
+      const loadLevelProfessionList = (selectedOptions) => {
+        let targetOption = selectedOptions[selectedOptions.length - 1];
+        if (targetOption) {
+          if (targetOption.tag == 'firstLevel') {
+            get("profession/getListByParentProfessionID",{parentProfessionID:targetOption.value}).then(data => {
+              targetOption.loading = false;
+              targetOption.children = (data as any[]).map((x) => {
+                return {
+                  label: x.name,
+                  value: x.code,
+                  isLeaf: false,
+                  tag: 'secondLevel'
+                };
+              });
+            });
+            postCompany.dataModel.professionID = null;
+          } else if (targetOption.tag == "secondLevel") {
+            get("profession/getListByParentProfessionID",{parentProfessionID:targetOption.value}).then(data => {
+              targetOption.loading = false;
+              targetOption.children = (data as any[]).map((x) => {
+                return {
+                  label: x.name,
+                  value: x.code,
+                  isLeaf: false,
+                  tag: 'thirdLevel'
+                };
+              });
+            });
+            postCompany.dataModel.professionID = null;
+          }else if (targetOption.tag == "thirdLevel") {
+            targetOption.loading = false;
+            targetOption.children = [];
+            postCompany.dataModel.professionID = targetOption.value;
+            postCompany.dataModel.postName = targetOption.label;
+            //console.log("xx",postCompany.dataModel);
+          }
+        }
+      };
 
       get('system/dictionary/getDictionaryItemByCodeList', {code: 'CultureLevel'}).then(result => {
         cultureLevelList.value = result;
@@ -294,7 +277,6 @@ export default defineComponent(
 
       get('companyService/company/getList', {pageIndex: 1, pageSize: 9999}).then(result => {
         companyList.value = result.list;
-        // console.log(companyList);
       })
 
       const onClose = () => {
@@ -304,70 +286,42 @@ export default defineComponent(
       };
 
       const onFinish = () => {
-        if(postCompany.companyId!=null){
-          getCompanyById(postCompany.companyId).then((result:any)=>{
-            const curSelectCompany:any = result;
-            postDataList.value.forEach(item => {
-              item.companyID = curSelectCompany.companyID;
-              item.userName = curSelectCompany.userName;
-              item.userMobile = curSelectCompany.userMobile;
-              item.postEmail = curSelectCompany.companyEmail;
-              item.recordStatus = 1;
-            });
-            console.log("postList",postDataList.value);
-            //判断重复-根据岗位名称、工作年限、学历要求、岗位薪资、试用期薪资
-            const isRepetition = hasDuplicates(postDataList.value, compareFunction);
-            if (isRepetition) {
-              message.warning('岗位信息存在重复!');
-              return;
+        if(postCompany.dataModel.professionID==null){
+          message.error("请选择完整的岗位信息!")
+        }else{
+          postCompany.dataModel.professionName=null;
+          //console.log("当前岗位信息",postCompany.dataModel);
+          savePost(postCompany.dataModel).then((result) => {
+            if (result) {
+              tabsViewStore.closeCurrentTab(fullpath);
+              tabsViewStore.addTabByPath('/companyService/post/index', {reload: 1});
             }
-            savePostList(postDataList.value).then((result) => {
-              if (result) {
-                tabsViewStore.closeCurrentTab(fullpath);
-                tabsViewStore.addTabByPath('/companyService/post/index', {reload: 1});
-              }
-            });
           });
-
         }
-      }
 
-      const hasDuplicates = (arr, compareFn) => {
-        for (let i = 0; i < arr.length; i++) {
-          for (let j = i + 1; j < arr.length; j++) {
-            if (compareFn(arr[i], arr[j])) {
-              return true;
-            }
-          }
-        }
-        return false;
       }
 
-      const compareFunction = (obj1, obj2) => obj1.postName === obj2.postName && obj1.workYear === obj2.workYear
-        && obj1.maxSalary === obj2.maxSalary && obj1.minSalary === obj2.minSalary
-        && obj1.trailMaxSalary === obj2.trailMaxSalary && obj1.trailMinSalary === obj2.trailMinSalary
-        && obj1.cultureRank === obj2.cultureRank;
 
       const loadData = (id: any) => {
+        isEdit.value = id != null;
+        getFirstProfessionList();
         getPostByID(id).then(result => {
-          // console.log(result);
-          postCompany.companyId = (result as postModel).companyID;
-          (postDataList.value as any[]).push(result);
+          console.log(result);
+          postCompany.dataModel = result;
         })
       };
 
       return {
-        // ...toRefs(formState),
+        ...toRefs(postCompany),
         loadData,
         onClose,
         onFinish,
-        addPost,
-        delPostItem,
+        loadLevelProfessionList,
+        firstProfessionList,
         companyList,
         postStatusList,
         trialStatusList,
         cultureLevelList,
-        postDataList,
         WorkYearTypeList,
         postCompany,
         isEdit

+ 1 - 1
vue/src/views/companyService/post/index.vue

@@ -230,7 +230,7 @@ export default defineComponent({
       formState.loading = true;
       const result: any = await getList(searchParams);
       dataList.value = result.list;
-      console.log(dataList.value);
+      console.log("所有岗位信息",dataList.value);
       formState.total = result.total;
       formState.loading = false;
     }

+ 64 - 81
vue/src/views/jobUserManager/jobhunt/edit.vue

@@ -55,30 +55,11 @@
           </a-form-item>
         </a-col>
         <a-col :span="9">
-          <a-form-item label="求职岗位"  name="professionID" :label-col="{span:7}" :rules="[{ required: true,message:'请继续选择求职岗位!' }]">
-            <label v-if="opCategory==3">{{dataModel.postID}}</label>
-            <a-select v-if="curLevel==1" ref="select" show-search optionFilterProp="label"  style="width: 230px"
-                      name="firstProfessionID" v-model:value="dataModel.firstProfessionID" @change="professionChange(1)" >
-              <a-select-option v-for="item in firstProfessionList" :label="item.name" :value="item.code"
-                               :key="item.code">
-                <span>{{ item.name }}</span>
-              </a-select-option>
-            </a-select>
-            <a-select v-if="curLevel==2" ref="select" show-search optionFilterProp="label" style="width: 230px"
-                      name="secondProfessionID" v-model:value="dataModel.secondProfessionID" @change="professionChange(2)" >
-              <a-select-option v-for="item in secondProfessionList" :label="item.name" :value="item.code"
-                               :key="item.code">
-                <span>{{ item.name }}</span>
-              </a-select-option>
-            </a-select>
-            <a-select v-if="curLevel==3" ref="select" show-search optionFilterProp="label" style="width: 230px"
-                      name="professionID"  v-model:value="dataModel.professionID" @change="professionChange(3)" >
-              <a-select-option v-for="item in thirdProfessionList" :label="item.name" :value="item.code"
-                               :key="item.code">
-                <span>{{ item.name }}</span>
-              </a-select-option>
-            </a-select>
-            <a-button :disabled="curLevel==1" @click="curLevel=curLevel>1?curLevel-1:curLevel">返回上一级</a-button>
+          <a-form-item label="求职岗位"  name="professionName" :label-col="{span:7}" :rules="[{ required: true,message:'请选择求职岗位!' }]">
+            <!-- <label v-if="opCategory==3">{{dataModel.postID}}</label> -->
+            <a-cascader :load-data="loadLevelProfessionList" v-model:value="dataModel.professionName"
+                        :options="firstProfessionList" change-on-select>
+            </a-cascader>
           </a-form-item>
         </a-col>
       </a-row>
@@ -124,10 +105,9 @@ import {defineComponent, reactive, ref, toRefs} from "vue";
 import {useTabsViewStore} from "@/store/modules/tabsView";
 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";
+import {CascaderProps, message, SelectProps} from "ant-design-vue";
 import {get} from "@/api/common";
 
 interface jobHuntModel {
@@ -153,10 +133,7 @@ export default defineComponent({
       selectedRowKeys: [],
       loading: false
     });
-    const curLevel = ref(1);
-    const firstProfessionList = ref([]);
-    const secondProfessionList = ref([]);
-    const thirdProfessionList = ref([]);
+    const firstProfessionList = ref<CascaderProps['options']>([]);
     const jobUserList = ref<SelectProps['options']>();
     const jobWorkTypeList =  ref<SelectProps['options']>();
     const jobHuntTypeList =  ref<SelectProps['options']>();
@@ -168,15 +145,56 @@ export default defineComponent({
       regionList.value = result;
     }
 
-    const getAllPostList = async function() {
-      /*const allPostResult :any = await getList({pageIndex:1,pageSize:10000});
-      allPostList.value = allPostResult.list;*/
-      /*console.log('allPostResult',allPostResult.list);*/
-      const professionResult :any = await get("profession/getFirstProfessionList",null);
-      firstProfessionList.value = professionResult;
-      //console.log('firstProfessionList',professionResult);
-    }
 
+    const getFirstProfessionList = () => {
+      get("profession/getFirstProfessionList", null).then(data=>{
+        firstProfessionList.value = (data as any[]).map((x) => {
+          return {
+            label: x.name,
+            value: x.code,
+            isLeaf: false,
+            tag: 'firstLevel'
+          }
+        });
+      });
+    }
+    const loadLevelProfessionList = (selectedOptions) => {
+      let targetOption = selectedOptions[selectedOptions.length - 1];
+      if (targetOption) {
+        if (targetOption.tag == 'firstLevel') {
+          get("profession/getListByParentProfessionID",{parentProfessionID:targetOption.value}).then(data => {
+            targetOption.loading = false;
+            targetOption.children = (data as any[]).map((x) => {
+              return {
+                label: x.name,
+                value: x.code,
+                isLeaf: false,
+                tag: 'secondLevel'
+              };
+            });
+          });
+          formData.dataModel.professionID = null;
+        } else if (targetOption.tag == "secondLevel") {
+          get("profession/getListByParentProfessionID",{parentProfessionID:targetOption.value}).then(data => {
+            targetOption.loading = false;
+            targetOption.children = (data as any[]).map((x) => {
+              return {
+                label: x.name,
+                value: x.code,
+                isLeaf: false,
+                tag: 'thirdLevel'
+              };
+            });
+          });
+          formData.dataModel.professionID = null;
+        }else if (targetOption.tag == "thirdLevel") {
+          targetOption.loading = false;
+          targetOption.children = [];
+          formData.dataModel.professionID = targetOption.value;
+          console.log("xx",formData.dataModel);
+        }
+      }
+    };
     const getJobUserList = async function() {
       const jobUserResult :any = await getJobUserDataList();
       jobUserList.value = jobUserResult;
@@ -201,31 +219,13 @@ export default defineComponent({
 
     const loadData = (id: string) => {
       formState.loading = true;
-      curLevel.value = 1;
       getWorkAreas();
-      getAllPostList();
+      getFirstProfessionList();
       getJobUserTypeList();
       getJobHuntTypeList();
       getJobWorkTypeList();
       getJobHuntByID(id).then((result: any) => {
         formData.dataModel = result;
-        if(formData.dataModel.professionID != null){
-          curLevel.value = 3;
-          get("profession/getParentProfessionID", {professionID:formData.dataModel.professionID}).then(data=>{
-            formData.dataModel.secondProfessionID = data;
-            get("profession/getListByParentProfessionID", {parentProfessionID:formData.dataModel.secondProfessionID}).then(data=>{
-              thirdProfessionList.value = data;
-              console.log("thirdProfessionList",thirdProfessionList.value);
-            });
-            get("profession/getParentProfessionID", {professionID:formData.dataModel.secondProfessionID}).then(data=>{
-              formData.dataModel.firstProfessionID = data;
-              get("profession/getListByParentProfessionID", {parentProfessionID:formData.dataModel.firstProfessionID}).then(data=>{
-                secondProfessionList.value = data;
-                console.log("secondProfessionList",secondProfessionList.value);
-              });
-            });
-          });
-        }
       });
       formState.loading = false;
     };
@@ -237,6 +237,7 @@ export default defineComponent({
     };
 
     const onFinish = () => {
+      isAllowCommit.value = true;
       if(formData.dataModel.minSalary!=""&&formData.dataModel.maxSalary!=""){
         if(formData.dataModel.minSalary>formData.dataModel.maxSalary){
           message.error("最低月薪不能大于最高月薪!");
@@ -244,11 +245,13 @@ export default defineComponent({
         }
       }
 
-      if(curLevel.value!=3){
+      if(formData.dataModel.professionID==null){
         message.error("请选择完整的岗位信息!");
         isAllowCommit.value = false;
       }
       if (isAllowCommit.value){
+        formData.dataModel.professionName=null;
+        //console.log("当前意向信息",formData.dataModel);
         saveJobHunt(formData.dataModel).then(result => {
           if (result) {
             onClose(1);
@@ -257,45 +260,25 @@ export default defineComponent({
       }
     };
 
-    const professionChange =(index:number)=>{
-      if(index==1){
-        get("profession/getListByParentProfessionID", {parentProfessionID:formData.dataModel.firstProfessionID}).then(data=>{
-          secondProfessionList.value = data;
-          formData.dataModel.secondProfessionID = null;
-          formData.dataModel.professionID = null;
-        });
-      }else if(index==2){
-        get("profession/getListByParentProfessionID", {parentProfessionID:formData.dataModel.secondProfessionID}).then(data=>{
-          thirdProfessionList.value = data;
-          formData.dataModel.professionID = null;
-        });
-      }
-      if(index!=3)
-      {
-        curLevel.value = index+1;
-      }
-    }
+
 
     return {
       ...toRefs(formData),
       loadData,
       onClose,
       onFinish,
-      professionChange,
+      getJobUserList,
+      loadLevelProfessionList,
       title,
       formState,
       opCategory,
       regionList,
-      curLevel,
       firstProfessionList,
-      secondProfessionList,
-      thirdProfessionList,
       jobUserList,
       jobUserTypeList,
       jobHuntTypeList,
       jobWorkTypeList,
       isAllowCommit,
-      getJobUserList
     };
   },
   created() {