Browse Source

feat: 求职人员增加大学基本信息内容

zhangying 6 months ago
parent
commit
496967e8d9

File diff suppressed because it is too large
+ 427 - 407
doc/就业驿站管理系统.pdb


File diff suppressed because it is too large
+ 434 - 414
doc/就业驿站管理系统.pdm


+ 32 - 0
doc/待更新脚本.txt

@@ -0,0 +1,32 @@
+-- 68 已更新
+-- 2024-8-15 求职人员数据字典新增
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a99101', '', 'JobStatus', 5, '升学深造', 5, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a99102', '', 'JobStatus', 6, '出国', 6, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a99103', '', 'JobStatus', 7, '应征入伍', 7, 1, 0);
+-- 求职人员表新增字段
+ALTER TABLE `pc_jobuser` ADD COLUMN `EducationalSystem` INT NULL COMMENT '学制' AFTER `Latitude`,
+ADD COLUMN `DifficultSituationID` INT NULL COMMENT '困难状况' AFTER `EducationalSystem`;
+ALTER TABLE `pc_jobuser`
+ADD COLUMN `OrdinaryPersonTypeID` int NULL COMMENT '人员类别' AFTER `DifficultSituationID`;
+ALTER TABLE `pc_jobuser`
+ADD COLUMN `EsHouseholdRegistration` varchar(255) NULL COMMENT '入学前户口所在地' AFTER `OrdinaryPersonTypeID`;
+-- 求职人员困难状况数据字典
+INSERT INTO sys_dictionary value('DifficultSituation', '求职人员困难状况', 201, 1);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a10001', '', 'DifficultSituation', 0, '不属于困难情况', 1, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a10002', '', 'DifficultSituation', 11, '零就业家庭', 2, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a10003', '', 'DifficultSituation', 12, '低保家庭', 3, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a10004', '', 'DifficultSituation', 20, '个人残疾', 4, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a10005', '', 'DifficultSituation', 40, '农村贫困户', 5, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a10006', '', 'DifficultSituation', 50, '优抚对象', 6, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a10007', '', 'DifficultSituation', 60, '申请助学贷款', 7, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c2a10008', '', 'DifficultSituation', 90, '其他困难状况', 8, 1, 0);
+-- 修改重点人员类别中的普通类别到人员类别字典中
+INSERT INTO sys_dictionary value('OrdinaryPersonType', '求职人员类别', 202, 1);
+UPDATE sys_dictionary_item SET DictionaryCode = 'OrdinaryPersonType' WHERE DictionaryCode = 'KeyPersonType' AND `Value` IN (1, 2,3,4,5,6,7,8,9,10,11,12);
+-- 重点人员类别与普通人员类别增加"其他"类型
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c3b10001', '', 'OrdinaryPersonType', 0, '其他', 1, 1, 0);
+INSERT INTO sys_dictionary_item value('36505ec8-966b-11ee-91fc-7085c3b10002', '', 'KeyPersonType', 0, '其他', 1, 1, 0);
+-- 修改求职人员的重点人员类别与普通人员类别内容
+UPDATE pc_jobuser SET OrdinaryPersonTypeID = KeyPersonTypeID WHERE KeyPersonTypeID IN (1,2,3,4,5,6,7,8,9,10,11,12);
+UPDATE pc_jobuser SET OrdinaryPersonTypeID = 0 WHERE KeyPersonTypeID IN (13,14,15,16,17,18,19,20,21,22,23,24);
+UPDATE pc_jobuser SET KeyPersonTypeID = 0 WHERE KeyPersonTypeID IN (1,2,3,4,5,6,7,8,9,10,11,12);

+ 187 - 47
h5app/src/views/pages/jobUserInfo/userEdit.vue

@@ -79,8 +79,9 @@
             <ion-label style="padding-left: 10px;">所在街道/社区/镇村<span class="danger">*</span></ion-label>
             <div class="form-select">
               <ion-select disabled name="regionCode"  id="regionCode" okText="确定" cancelText="取消" v-model="baseData.regionCode"
-                          interface="action-sheet" placeholder="请选择市/县" style="width:50%;float:left;" @ionChange="regionChange()" >
-                <ion-select-option v-for=" (it,key) in regionList" :key="key" :value="it.code">
+                          interface="action-sheet" placeholder="请选择常住市/县" style="width:50%;float:left;"
+                          @ionChange="regionChange()">
+                <ion-select-option v-for="(it,key) in regionList" :key="key" :value="it.code">
                   {{ it.name }}
                 </ion-select-option>
               </ion-select>
@@ -111,9 +112,9 @@
 <!--              </ion-select>-->
 <!--            </div>-->
             <div class="form-input">
-              <ion-label>住址<span class="danger">*</span></ion-label>
+              <ion-label>址<span class="danger">*</span></ion-label>
               <ion-input name="address" id="address"  style="text-align: left;"  class="custom" :clear-input="true"
-                         placeholder="请输入住址" v-model="baseData.address" ></ion-input>
+                         placeholder="请输入址" v-model="baseData.address"></ion-input>
               <!--          <ion-note slot="error">地址不能为空</ion-note>-->
             </div>
             <div class="form-select">
@@ -127,22 +128,97 @@
             <div class="form-select">
               <ion-label>重点人员类别<span class="danger">*</span></ion-label>
               <ion-select name="keyPersonTypeID"  id="keyPersonTypeID" okText="确定" cancelText="取消" v-model="baseData.keyPersonTypeID"
-                          interface="action-sheet" placeholder="请选择重点人员类别"   @ionChange="keyPersonTypeChange"  style="width:100%;text-align:left;" >
+                          interface="action-sheet" placeholder="请选择重点人员类别" style="width:100%;text-align:left;">
                 <ion-select-option v-for=" (it,key) in keyPersonTypeList" :key="key" :value="it.value">
                   {{ it.name }}
                 </ion-select-option>
               </ion-select>
               <!--          <ion-note slot="error">重点人员类别不能为空</ion-note>-->
             </div>
-            <div class="form-select" >
-              <ion-label>毕业日期<span v-show="isGraduating" class="danger">*</span></ion-label>
-              <ion-datetime-button datetime="showFinishDate" style="position:absolute;left:10px;" ></ion-datetime-button>
-              <ion-modal :keep-contents-mounted="true">
-                <ion-datetime name="showFinishDate" id="showFinishDate" v-model="baseData.showFinishDate"
-                              dataformatas="YYYY-MM-DD" presentation="month-year" cancel-text="取消" done-text="确定"
-                              :show-default-buttons="true" @ionChange="finishDateChange()">
-                </ion-datetime>
-              </ion-modal>
+            <div class="form-select">
+              <ion-label>人员类别<span class="danger">*</span></ion-label>
+              <ion-select name="ordinaryPersonTypeID" id="ordinaryPersonTypeID" okText="确定" cancelText="取消"
+                          v-model="baseData.ordinaryPersonTypeID"
+                          interface="action-sheet" placeholder="请选择人员类别" @ionChange="ordinaryPersonTypeChange"
+                          style="width:100%;text-align:left;">
+                <ion-select-option v-for="(it,key) in ordinaryPersonTypeList" :key="key" :value="it.value">
+                  {{ it.name }}
+                </ion-select-option>
+              </ion-select>
+            </div>
+            <div style="width:100%;overflow: hidden;height: 30px;"></div>
+            <div class="form-title">
+              大学基本信息
+              <div style="float: right;">
+                <ion-label style="color: red;font-size: 14px;" @click="dxExpand=!dxExpand">{{
+                    dxExpand ? "收起" : "展开"
+                  }}
+                </ion-label>
+              </div>
+            </div>
+            <div v-if="dxExpand">
+              <div class="form-input">
+                <ion-label>毕业院校<span v-show="isGraduating" class="danger">*</span></ion-label>
+                <ion-input name="finishSchool" id="finishSchool" style="text-align: left;" class="custom"
+                           :clear-input="true"
+                           placeholder="请输入毕业院校" v-model="baseData.finishSchool"></ion-input>
+              </div>
+              <div class="form-select">
+                <ion-label>是否非全日制</ion-label>
+                <ion-select name="isFullTime" id="isFullTime" okText="确定" cancelText="取消"
+                            v-model="baseData.isFullTime"
+                            interface="action-sheet" placeholder="请选择是否非全日制"
+                            style="width:100%;text-align:left;">
+                  <ion-select-option v-for="(it,key) in isFullTimeList" :key="key" :value="it.value">
+                    {{ it.name }}
+                  </ion-select-option>
+                </ion-select>
+              </div>
+              <div class="form-input">
+                <ion-label>专业</ion-label>
+                <ion-input name="professionID" id="profession" style="text-align: left;" class="custom"
+                           :clear-input="true"
+                           placeholder="请输入专业" v-model="baseData.profession"></ion-input>
+              </div>
+              <div class="form-input">
+                <ion-label>学制(年)<span v-show="isGraduating" class="danger">*</span></ion-label>
+                <ion-input type="number" :min="0" name="educationalSystem" id="educationalSystem"
+                           style="text-align: left;" class="custom" @ion-blur="educationalSystemBlur"
+                           placeholder="请输入学制" v-model="baseData.educationalSystem"></ion-input>
+              </div>
+              <div class="form-input">
+                <ion-label>毕业日期<span v-show="isGraduating" class="danger">*</span></ion-label>
+                <div class="dateTimeBox">
+                  <ion-datetime-button datetime="showFinishDate"
+                                       style="position:absolute;left:10px;"></ion-datetime-button>
+                  <ion-modal :keep-contents-mounted="true">
+                    <ion-datetime name="showFinishDate" id="showFinishDate" v-model="baseData.showFinishDate"
+                                  dataformatas="YYYY-MM-DD" presentation="month-year" cancel-text="取消"
+                                  done-text="确定"
+                                  :show-default-buttons="true" @ionChange="finishDateChange()">
+                    </ion-datetime>
+                  </ion-modal>
+                </div>
+              </div>
+              <div style="width:100%;overflow: hidden;height: 30px;"></div>
+              <div class="form-select">
+                <ion-label>困难状况</ion-label>
+                <ion-select name="difficultSituationID" id="difficultSituationID" okText="确定" cancelText="取消"
+                            v-model="baseData.difficultSituationID"
+                            interface="action-sheet" placeholder="请选择困难状况"
+                            style="width:100%;text-align:left;">
+                  <ion-select-option v-for="(it,key) in difficultSituationList" :key="key" :value="it.value">
+                    {{ it.name }}
+                  </ion-select-option>
+                </ion-select>
+              </div>
+              <div class="form-input">
+                <ion-label>入学前户口所在地</ion-label>
+                <ion-input name="esHouseholdRegistration" id="esHouseholdRegistration" style="text-align: left;"
+                           class="custom"
+                           :clear-input="true"
+                           placeholder="请输入入学前户口所在地" v-model="baseData.esHouseholdRegistration"></ion-input>
+              </div>
             </div>
             <div style="width:100%;overflow: hidden;height: 30px;"></div>
             <div class="form-title">
@@ -177,26 +253,6 @@
                 <!--            <ion-input name="nation" id="nation"  style="text-align: left;" class="custom"  :clear-input="true"
                                        v-model="baseData.nation" placeholder="请输入民族" ></ion-input>-->
               </div>
-
-              <div class="form-input">
-                <ion-label>毕业院校</ion-label>
-                <ion-input name="finishSchool" id="finishSchool"  style="text-align: left;"  class="custom" :clear-input="true"
-                           placeholder="请输入毕业院校" v-model="baseData.finishSchool" ></ion-input>
-              </div>
-              <div class="form-input">
-                <ion-label>专业</ion-label>
-                <ion-input name="professionID" id="profession"  style="text-align: left;"  class="custom" :clear-input="true"
-                           placeholder="请输入专业" v-model="baseData.profession" ></ion-input>
-              </div>
-              <div class="form-select">
-                <ion-label>是否非全日制</ion-label>
-                <ion-select name="isFullTime"  id="isFullTime" okText="确定" cancelText="取消" v-model="baseData.isFullTime"
-                            interface="action-sheet" placeholder="请选择是否非全日制" style="width:100%;text-align:left;" >
-                  <ion-select-option v-for=" (it,key) in isFullTimeList" :key="key" :value="it.value">
-                    {{ it.name }}
-                  </ion-select-option>
-                </ion-select>
-              </div>
               <div class="form-input">
                 <ion-label>职业资格类别</ion-label>
                 <div>
@@ -321,9 +377,10 @@
                            placeholder="请输入电子邮箱" v-model="baseData.email" ></ion-input>
               </div>
               <div class="form-input">
-                <ion-label>家庭住址</ion-label>
+                <ion-label>户籍详细地址</ion-label>
                 <ion-textarea name="familyAddress" id="familyAddress"  class="custom" rows="4"
-                              placeholder="请输入家庭住址" v-model="baseData.familyAddress" style="border-bottom: 1px solid #fff2e8;"></ion-textarea>
+                              placeholder="请输入户籍详细地址" v-model="baseData.familyAddress"
+                              style="border-bottom: 1px solid #fff2e8;"></ion-textarea>
               </div>
               <div class="form-input">
                 <ion-label>个人评价</ion-label>
@@ -542,6 +599,58 @@ interface StepParams{
   loginUserID: string,
   statusVal: number
 }
+
+interface BaseData {
+  baseData: {
+    jobUserID: any,
+    siteID: any,
+    name: any,
+    identityNumber: any,
+    sex: any,
+    userMobile: any,
+    address: any,
+    jobStatusID: any,
+    keyPersonTypeID: any,
+    politicsStatusID: any,
+    birthPlace: any,
+    birthDay: any,
+    familyNatureID: any,
+    cultureRank: any,
+    healthID: any,
+    height: any,
+    vision: any,
+    weight: any,
+    maritalStatusID: any,
+    provinceCode: any,
+    regionCode: any,
+    streetCode: any,
+    userName: any,
+    familyAddress: any,
+    postalCode: any,
+    email: any,
+    hobby: any,
+    personalSkills: any,
+    socialSecurityCard: any,
+    finishSchool: any,
+    finishDate: any,
+    showFinishDate: any,
+    profession: any,
+    nativePlace: any,
+    isFullTime: any,
+    occupationalCategory: any,
+    occupationalCategoryName: any,
+    occupationalLevel: any,
+    openId: any,
+    isAppInsert: any,
+    loginUserID: any,
+    longitude: any,
+    latitude: any,
+    ordinaryPersonTypeID: any,
+    educationalSystem: any,
+    difficultSituationID: any,
+    esHouseholdRegistration: any,
+  }
+}
 export default defineComponent({
   name: "jobUserInfoEdit",
   components: {BImage, CategorySelection},
@@ -555,6 +664,7 @@ export default defineComponent({
     const urlParams:{[key:string]:any} = getUrlParams();
     const isAllowCommit = ref(true);
     const expand = ref<boolean>(false);
+    const dxExpand = ref<boolean>(false);
     const loading = ref(true);
     const siteInfoList = ref<SelectProps[]>([]);
     const curStepData = ref<StepParams>({
@@ -571,6 +681,7 @@ export default defineComponent({
     const genderList = ref<SelectProps[]>([]);
     const jobUserStatusList = ref<SelectProps[]>([]);
     const keyPersonTypeList = ref<SelectProps[]>([]);
+    const ordinaryPersonTypeList = ref<SelectProps[]>();
     const cultureRankList = ref<SelectProps[]>([]);
     const userHealthList = ref<SelectProps[]>([]);
     const bloodTypeList  = ref<SelectProps[]>([]);
@@ -580,6 +691,7 @@ export default defineComponent({
     const isFullTimeList  = ref<SelectProps[]>([]);
     //const occupationalCategoryList  = ref<SelectProps[]>([]);
     const occupationalLevelList  = ref<SelectProps[]>([]);
+    const difficultSituationList = ref<SelectProps[]>();
     const familyNatureList = ref([]);
     const politicsStatusList = ref([]);
     const regionList  = ref<SelectProps[]>([]);
@@ -588,7 +700,7 @@ export default defineComponent({
     const experienceList = ref([]);
     const jobHuntList = ref([]);
     const honorList = ref([]);
-    const baseInfoData = reactive({
+    const baseInfoData = reactive<BaseData>({
       baseData:{
         jobUserID:null,
         siteID:null,
@@ -605,7 +717,6 @@ export default defineComponent({
         familyNatureID:null,
         cultureRank:null,
         healthID:null,
-        //bloodTypeID:null,
         height:null,
         vision:null,
         weight:null,
@@ -633,7 +744,11 @@ export default defineComponent({
         isAppInsert:1,
         loginUserID: '',
         longitude: null,
-        latitude: null
+        latitude: null,
+        ordinaryPersonTypeID: null,
+        educationalSystem: null,
+        difficultSituationID: null,
+        esHouseholdRegistration: null,
       }});
     const pageParams = reactive({
       pageIndex: 1,
@@ -802,6 +917,18 @@ export default defineComponent({
     const onSave = async function (){
       if (curStepData.value.statusVal==1){
         const isFormCorrect = await baseDataValid.value.$validate();
+        if (isGraduating.value && baseInfoData.baseData.finishDate == null) {
+          await presentAlert("请选择毕业日期!");
+          return null;
+        }
+        if (isGraduating.value && baseInfoData.baseData.educationalSystem == null) {
+          await presentAlert("请输入学制!");
+          return null;
+        }
+        if (isGraduating.value && baseInfoData.baseData.finishSchool == null) {
+          await presentAlert("请输入毕业院校!");
+          return null;
+        }
         if(!isFormCorrect){
           await presentAlert("请填写完整的信息!");
           return null;
@@ -878,6 +1005,8 @@ export default defineComponent({
       jobUserStatusList.value = jobUserStatusResult;
       const keyPersonTypeResult :any = await getSysDictionaryList("KeyPersonType");
       keyPersonTypeList.value = keyPersonTypeResult;
+      const ordinaryPersonTypeResult: any = await getSysDictionaryList("OrdinaryPersonType");
+      ordinaryPersonTypeList.value = ordinaryPersonTypeResult;
       const cultureRankResult :any = await getSysDictionaryList("HighestDegree");
       cultureRankList.value = cultureRankResult;
       const userHealthResult :any = await getSysDictionaryList("Health");
@@ -894,6 +1023,8 @@ export default defineComponent({
       nationTypeList.value = nationTypeListResult;
       const isFullTimeListResult :any = await getSysDictionaryList("IsFullTime");
       isFullTimeList.value = isFullTimeListResult;
+      const difficultSituationResult: any = await getSysDictionaryList("DifficultSituation");
+      difficultSituationList.value = difficultSituationResult;
       //const occupationalCategoryListResult :any = await getSysDictionaryList("OccupationalCategory");
       //occupationalCategoryList.value = occupationalCategoryListResult;
       const occupationalLevelListResult :any = await getSysDictionaryList("OccupationalLevel");
@@ -919,12 +1050,11 @@ export default defineComponent({
       baseInfoData.baseData.finishDate = baseInfoData.baseData.showFinishDate.substring(0,7);
       console.log(baseInfoData.baseData.finishDate);
     }
-    const isGraduating = ref(false);
-    const keyPersonTypeChange = function (){
-      isGraduating.value = false;
-      if(baseInfoData.baseData.keyPersonTypeID==2){
-        isGraduating.value = true;
-      }
+    const isGraduating = ref(false); // 大学基础信息是否为必填
+    const ordinaryPersonTypeChange = function () {
+      // 如果是应届高校毕业生,则大学基础信息部分字段为必填
+      isGraduating.value = baseInfoData.baseData.ordinaryPersonTypeID == 2;
+      dxExpand.value = isGraduating.value;
     }
 
 
@@ -937,6 +1067,11 @@ export default defineComponent({
       await getRegionList();
       await regionChange();
     }
+    const educationalSystemBlur = function () {
+      if (baseInfoData.baseData.educationalSystem != null) {
+        baseInfoData.baseData.educationalSystem = Math.floor(baseInfoData.baseData.educationalSystem);
+      }
+    }
 
     const loadData = async (jobUserID: any,status:any,userId:any) => {
       loading.value = true;
@@ -1010,6 +1145,7 @@ export default defineComponent({
     const reload = (jobUserID:any,status:any,userId:any) => {
       pageParams.pageIndex = 1;
       expand.value = false;
+      dxExpand.value = false;
       loadData(jobUserID,status,userId);
     }
 
@@ -1039,6 +1175,7 @@ export default defineComponent({
       router,
       curOpenID,
       expand,
+      dxExpand,
       loading,
       stepList,
       curStepData,
@@ -1054,6 +1191,8 @@ export default defineComponent({
       pageParams,
       jobUserStatusList,
       keyPersonTypeList,
+      ordinaryPersonTypeList,
+      difficultSituationList,
       cultureRankList,
       userHealthList,
       bloodTypeList,
@@ -1074,7 +1213,7 @@ export default defineComponent({
       infoAlterData,
       isGraduating,
       finishDateChange,
-      keyPersonTypeChange,
+      ordinaryPersonTypeChange,
       provinceChange,
       regionChange,
       onSetOccupationalID,
@@ -1092,7 +1231,8 @@ export default defineComponent({
       getSelectorDataList,
       getRegionList,
       getStreetList,
-      dayjs
+      dayjs,
+      educationalSystemBlur
     }
   },
   mounted(){

+ 4 - 0
h5app/src/views/pages/jobhunt/detail.vue

@@ -64,6 +64,10 @@
             <ion-label>重点人员类别</ion-label>
             <ion-text>{{ dataModel.keyTypeName }}</ion-text>
           </div>
+          <div class="form-detail">
+            <ion-label>人员类别</ion-label>
+            <ion-text>{{ dataModel.ordinaryPersonTypeName }}</ion-text>
+          </div>
           <div class="form-detail">
             <ion-label>毕业日期</ion-label>
             <ion-text>{{ dataModel.finishDate }}</ion-text>

+ 184 - 47
h5app/src/views/pages/jobhunt/edit.vue

@@ -79,8 +79,9 @@
             <ion-label style="padding-left: 10px;">所在街道/社区/镇村<span class="danger">*</span></ion-label>
             <div class="form-select">
               <ion-select disabled name="regionCode"  id="regionCode" okText="确定" cancelText="取消" v-model="baseData.regionCode"
-                          interface="action-sheet" placeholder="请选择市/县" style="width:50%;float:left;" @ionChange="regionChange()" >
-                <ion-select-option v-for=" (it,key) in regionList" :key="key" :value="it.code">
+                          interface="action-sheet" placeholder="请选择常住市/县" style="width:50%;float:left;"
+                          @ionChange="regionChange()">
+                <ion-select-option v-for="(it,key) in regionList" :key="key" :value="it.code">
                   {{ it.name }}
                 </ion-select-option>
               </ion-select>
@@ -93,9 +94,9 @@
               </ion-select>
             </div>
 <!--            <div class="form-select">-->
-<!--              <ion-label>市/县<span class="danger">*</span></ion-label>-->
+            <!--              <ion-label>常住市/县<span class="danger">*</span></ion-label>-->
 <!--              <ion-select disabled name="regionCode"  id="regionCode" okText="确定" cancelText="取消" v-model="baseData.regionCode"-->
-<!--                          interface="action-sheet" placeholder="请选择市/县" style="width:100%;text-align:left;" @ionChange="regionChange()" >-->
+            <!--                          interface="action-sheet" placeholder="请选择常住市/县" style="width:100%;text-align:left;" @ionChange="regionChange()" >-->
 <!--                <ion-select-option v-for=" (it,key) in regionList" :key="key" :value="it.code">-->
 <!--                  {{ it.name }}-->
 <!--                </ion-select-option>-->
@@ -111,9 +112,9 @@
 <!--              </ion-select>-->
 <!--            </div>-->
             <div class="form-input">
-              <ion-label>住址<span class="danger">*</span></ion-label>
+              <ion-label>址<span class="danger">*</span></ion-label>
               <ion-input name="address" id="address"  style="text-align: left;"  class="custom" :clear-input="true"
-                     placeholder="请输入住址" v-model="baseData.address" ></ion-input>
+                         placeholder="请输入址" v-model="baseData.address"></ion-input>
 <!--          <ion-note slot="error">地址不能为空</ion-note>-->
             </div>
             <div class="form-select">
@@ -127,22 +128,97 @@
             <div class="form-select">
               <ion-label>重点人员类别<span class="danger">*</span></ion-label>
               <ion-select name="keyPersonTypeID"  id="keyPersonTypeID" okText="确定" cancelText="取消" v-model="baseData.keyPersonTypeID"
-                          interface="action-sheet" placeholder="请选择重点人员类别"  @ionChange="keyPersonTypeChange" style="width:100%;text-align:left;" >
+                          interface="action-sheet" placeholder="请选择重点人员类别" style="width:100%;text-align:left;">
                 <ion-select-option v-for=" (it,key) in keyPersonTypeList" :key="key" :value="it.value">
                   {{ it.name }}
                 </ion-select-option>
               </ion-select>
               <!--          <ion-note slot="error">重点人员类别不能为空</ion-note>-->
             </div>
-            <div class="form-select" >
-              <ion-label>毕业日期<span v-show="isGraduating" class="danger">*</span></ion-label>
-              <ion-datetime-button datetime="showFinishDate" style="position:absolute;left:10px;" ></ion-datetime-button>
-              <ion-modal :keep-contents-mounted="true">
-                <ion-datetime name="showFinishDate" id="showFinishDate" v-model="baseData.showFinishDate"
-                              dataformatas="YYYY-MM-DD" presentation="month-year" cancel-text="取消" done-text="确定"
-                              :show-default-buttons="true" @ionChange="finishDateChange()">
-                </ion-datetime>
-              </ion-modal>
+            <div class="form-select">
+              <ion-label>人员类别<span class="danger">*</span></ion-label>
+              <ion-select name="ordinaryPersonTypeID" id="ordinaryPersonTypeID" okText="确定" cancelText="取消"
+                          v-model="baseData.ordinaryPersonTypeID"
+                          interface="action-sheet" placeholder="请选择人员类别" @ionChange="ordinaryPersonTypeChange"
+                          style="width:100%;text-align:left;">
+                <ion-select-option v-for="(it,key) in ordinaryPersonTypeList" :key="key" :value="it.value">
+                  {{ it.name }}
+                </ion-select-option>
+              </ion-select>
+            </div>
+            <div style="width:100%;overflow: hidden;height: 30px;"></div>
+            <div class="form-title">
+              大学基本信息
+              <div style="float: right;">
+                <ion-label style="color: red;font-size: 14px;" @click="dxExpand=!dxExpand">{{
+                    dxExpand ? "收起" : "展开"
+                  }}
+                </ion-label>
+              </div>
+            </div>
+            <div v-if="dxExpand">
+              <div class="form-input">
+                <ion-label>毕业院校<span v-show="isGraduating" class="danger">*</span></ion-label>
+                <ion-input name="finishSchool" id="finishSchool" style="text-align: left;" class="custom"
+                           :clear-input="true"
+                           placeholder="请输入毕业院校" v-model="baseData.finishSchool"></ion-input>
+              </div>
+              <div class="form-select">
+                <ion-label>是否非全日制</ion-label>
+                <ion-select name="isFullTime" id="isFullTime" okText="确定" cancelText="取消"
+                            v-model="baseData.isFullTime"
+                            interface="action-sheet" placeholder="请选择是否非全日制"
+                            style="width:100%;text-align:left;">
+                  <ion-select-option v-for="(it,key) in isFullTimeList" :key="key" :value="it.value">
+                    {{ it.name }}
+                  </ion-select-option>
+                </ion-select>
+              </div>
+              <div class="form-input">
+                <ion-label>专业</ion-label>
+                <ion-input name="professionID" id="profession" style="text-align: left;" class="custom"
+                           :clear-input="true"
+                           placeholder="请输入专业" v-model="baseData.profession"></ion-input>
+              </div>
+              <div class="form-input">
+                <ion-label>学制(年)<span v-show="isGraduating" class="danger">*</span></ion-label>
+                <ion-input type="number" :min="0" name="educationalSystem" id="educationalSystem"
+                           style="text-align: left;" class="custom" @ion-blur="educationalSystemBlur"
+                           placeholder="请输入学制" v-model="baseData.educationalSystem"></ion-input>
+              </div>
+              <div class="form-input">
+                <ion-label>毕业日期<span v-show="isGraduating" class="danger">*</span></ion-label>
+                <div class="dateTimeBox">
+                  <ion-datetime-button datetime="showFinishDate"
+                                       style="position:absolute;left:10px;"></ion-datetime-button>
+                  <ion-modal :keep-contents-mounted="true">
+                    <ion-datetime name="showFinishDate" id="showFinishDate" v-model="baseData.showFinishDate"
+                                  dataformatas="YYYY-MM-DD" presentation="month-year" cancel-text="取消"
+                                  done-text="确定"
+                                  :show-default-buttons="true" @ionChange="finishDateChange()">
+                    </ion-datetime>
+                  </ion-modal>
+                </div>
+              </div>
+              <div style="width:100%;overflow: hidden;height: 30px;"></div>
+              <div class="form-select">
+                <ion-label>困难状况</ion-label>
+                <ion-select name="difficultSituationID" id="difficultSituationID" okText="确定" cancelText="取消"
+                            v-model="baseData.difficultSituationID"
+                            interface="action-sheet" placeholder="请选择困难状况"
+                            style="width:100%;text-align:left;">
+                  <ion-select-option v-for="(it,key) in difficultSituationList" :key="key" :value="it.value">
+                    {{ it.name }}
+                  </ion-select-option>
+                </ion-select>
+              </div>
+              <div class="form-input">
+                <ion-label>入学前户口所在地</ion-label>
+                <ion-input name="esHouseholdRegistration" id="esHouseholdRegistration" style="text-align: left;"
+                           class="custom"
+                           :clear-input="true"
+                           placeholder="请输入入学前户口所在地" v-model="baseData.esHouseholdRegistration"></ion-input>
+              </div>
             </div>
             <div style="width:100%;overflow: hidden;height: 30px;"></div>
         <div class="form-title">
@@ -175,25 +251,6 @@
               </ion-select-option>
             </ion-select>
           </div>
-          <div class="form-input">
-            <ion-label>毕业院校</ion-label>
-            <ion-input name="finishSchool" id="finishSchool"  style="text-align: left;"  class="custom" :clear-input="true"
-                       placeholder="请输入毕业院校" v-model="baseData.finishSchool" ></ion-input>
-          </div>
-          <div class="form-input">
-            <ion-label>专业</ion-label>
-            <ion-input name="professionID" id="profession"  style="text-align: left;"  class="custom" :clear-input="true"
-                       placeholder="请输入专业" v-model="baseData.profession" ></ion-input>
-          </div>
-          <div class="form-select">
-            <ion-label>是否非全日制</ion-label>
-            <ion-select name="isFullTime"  id="isFullTime" okText="确定" cancelText="取消" v-model="baseData.isFullTime"
-                        interface="action-sheet" placeholder="请选择是否非全日制" style="width:100%;text-align:left;" >
-              <ion-select-option v-for=" (it,key) in isFullTimeList" :key="key" :value="it.value">
-                {{ it.name }}
-              </ion-select-option>
-            </ion-select>
-          </div>
           <div class="form-input">
             <ion-label>职业资格类别</ion-label>
             <div>
@@ -311,9 +368,10 @@
                        placeholder="请输入电子邮箱" v-model="baseData.email" ></ion-input>
           </div>
           <div class="form-input">
-            <ion-label>家庭住址</ion-label>
+            <ion-label>户籍详细地址</ion-label>
             <ion-textarea name="familyAddress" id="familyAddress"  class="custom" rows="4"
-                          placeholder="请输入家庭住址" v-model="baseData.familyAddress" style="border-bottom: 1px solid #fff2e8;"></ion-textarea>
+                          placeholder="请输入户籍详细地址" v-model="baseData.familyAddress"
+                          style="border-bottom: 1px solid #fff2e8;"></ion-textarea>
           </div>
           <div class="form-input">
             <ion-label>个人评价</ion-label>
@@ -548,6 +606,57 @@ interface StepParams{
   name: string,
   statusVal: number
 }
+
+interface BaseData {
+  baseData: {
+    jobUserID: any,
+    loginUserID: any,
+    siteID: any,
+    name: any,
+    identityNumber: any,
+    sex: any,
+    userMobile: any,
+    address: any,
+    jobStatusID: any,
+    keyPersonTypeID: any,
+    politicsStatusID: any,
+    birthPlace: any,
+    birthDay: any,
+    familyNatureID: any,
+    cultureRank: any,
+    healthID: any,
+    height: any,
+    vision: any,
+    weight: any,
+    maritalStatusID: any,
+    provinceCode: any,
+    regionCode: any,
+    streetCode: any,
+    userName: any,
+    familyAddress: any,
+    postalCode: any,
+    email: any,
+    hobby: any,
+    personalSkills: any,
+    socialSecurityCard: any,
+    finishSchool: any,
+    finishDate: any,
+    showFinishDate: any,
+    profession: any,
+    nativePlace: any,
+    isFullTime: any,
+    occupationalCategory: any,
+    occupationalCategoryName: any,
+    occupationalLevel: any,
+    longitude: any,
+    latitude: any,
+    listLabel: any,
+    ordinaryPersonTypeID: any,
+    educationalSystem: any,
+    difficultSituationID: any,
+    esHouseholdRegistration: any,
+  }
+}
 export default defineComponent({
   name: 'jobUserEdit',
   components: {BImage, CategorySelection, LabelSelection},
@@ -559,6 +668,7 @@ export default defineComponent({
     const route = useRoute();
     const isAllowCommit = ref(true);
     const expand = ref<boolean>(false);
+    const dxExpand = ref<boolean>(false);
     const loading = ref(true);
     const siteInfoList = ref<SelectProps[]>([]);
     const curStepData = ref<StepParams>({
@@ -575,6 +685,7 @@ export default defineComponent({
     const genderList = ref<SelectProps[]>([]);
     const jobUserStatusList = ref<SelectProps[]>([]);
     const keyPersonTypeList = ref<SelectProps[]>([]);
+    const ordinaryPersonTypeList = ref<SelectProps[]>();
     const cultureRankList = ref<SelectProps[]>([]);
     const userHealthList = ref<SelectProps[]>([]);
     const bloodTypeList  = ref<SelectProps[]>([]);
@@ -584,6 +695,7 @@ export default defineComponent({
     const isFullTimeList  = ref<SelectProps[]>([]);
     //const occupationalCategoryList  = ref<SelectProps[]>([]);
     const occupationalLevelList  = ref<SelectProps[]>([]);
+    const difficultSituationList = ref<SelectProps[]>();
     const familyNatureList = ref([]);
     const politicsStatusList = ref([]);
     const regionList  = ref<SelectProps[]>([]);
@@ -593,7 +705,7 @@ export default defineComponent({
     const jobHuntList = ref([]);
     const honorList = ref([]);
     const isEdit =ref(false);
-    const baseInfoData = reactive({
+    const baseInfoData = reactive<BaseData>({
       baseData:{
         jobUserID:null,
         loginUserID:'',
@@ -637,7 +749,11 @@ export default defineComponent({
         occupationalLevel: null,
         longitude: null,
         latitude: null,
-        listLabel: null
+        listLabel: null,
+        ordinaryPersonTypeID: null,
+        educationalSystem: null,
+        difficultSituationID: null,
+        esHouseholdRegistration: null,
       }});
     const pageParams = reactive({
       pageIndex: 1,
@@ -813,6 +929,14 @@ export default defineComponent({
           await presentAlert("请选择毕业日期!");
           return null;
         }
+        if (isGraduating.value && baseInfoData.baseData.educationalSystem == null) {
+          await presentAlert("请输入学制!");
+          return null;
+        }
+        if (isGraduating.value && baseInfoData.baseData.finishSchool == null) {
+          await presentAlert("请输入毕业院校!");
+          return null;
+        }
         if(!isFormCorrect){
             await presentAlert("请填写完整的信息!");
             return null;
@@ -885,6 +1009,8 @@ export default defineComponent({
       jobUserStatusList.value = jobUserStatusResult;
       const keyPersonTypeResult :any = await getSysDictionaryList("KeyPersonType");
       keyPersonTypeList.value = keyPersonTypeResult;
+      const ordinaryPersonTypeResult: any = await getSysDictionaryList("OrdinaryPersonType");
+      ordinaryPersonTypeList.value = ordinaryPersonTypeResult;
       const cultureRankResult :any = await getSysDictionaryList("HighestDegree");
       cultureRankList.value = cultureRankResult;
       const userHealthResult :any = await getSysDictionaryList("Health");
@@ -901,6 +1027,8 @@ export default defineComponent({
       nationTypeList.value = nationTypeListResult;
       const isFullTimeListResult :any = await getSysDictionaryList("IsFullTime");
       isFullTimeList.value = isFullTimeListResult;
+      const difficultSituationResult: any = await getSysDictionaryList("DifficultSituation");
+      difficultSituationList.value = difficultSituationResult;
       //const occupationalCategoryListResult :any = await getSysDictionaryList("OccupationalCategory");
       //occupationalCategoryList.value = occupationalCategoryListResult;
       const occupationalLevelListResult :any = await getSysDictionaryList("OccupationalLevel");
@@ -925,12 +1053,11 @@ export default defineComponent({
       baseInfoData.baseData.finishDate = baseInfoData.baseData.showFinishDate.substring(0,7);
       console.log(baseInfoData.baseData.finishDate);
     }
-    const isGraduating = ref(false);
-    const keyPersonTypeChange = function (){
-      isGraduating.value = false;
-      if(baseInfoData.baseData.keyPersonTypeID==2){
-        isGraduating.value = true;
-      }
+    const isGraduating = ref(false); // 大学基础信息是否为必填
+    const ordinaryPersonTypeChange = function () {
+      // 如果是应届高校毕业生,则大学基础信息部分字段为必填
+      isGraduating.value = baseInfoData.baseData.ordinaryPersonTypeID == 2;
+      dxExpand.value = isGraduating.value;
     }
 
     const regionChange = async function(){
@@ -942,6 +1069,11 @@ export default defineComponent({
       await getRegionList();
       await regionChange();
     }
+    const educationalSystemBlur = function () {
+      if (baseInfoData.baseData.educationalSystem != null) {
+        baseInfoData.baseData.educationalSystem = Math.floor(baseInfoData.baseData.educationalSystem);
+      }
+    }
 
     const loadData = async (jobUserID: any,status:any) => {
       loading.value = true;
@@ -1016,6 +1148,7 @@ export default defineComponent({
 
     const reload = (jobUserID:any,status:any) => {
       pageParams.pageIndex = 1;
+      dxExpand.value = false;
       expand.value = false;
       loadData(jobUserID,status);
     }
@@ -1045,6 +1178,7 @@ export default defineComponent({
       router,
       isEdit,
       expand,
+      dxExpand,
       loading,
       stepList,
       curStepData,
@@ -1060,6 +1194,8 @@ export default defineComponent({
       pageParams,
       jobUserStatusList,
       keyPersonTypeList,
+      ordinaryPersonTypeList,
+      difficultSituationList,
       cultureRankList,
       userHealthList,
       bloodTypeList,
@@ -1080,7 +1216,7 @@ export default defineComponent({
       isGraduating,
       honorList,
       finishDateChange,
-      keyPersonTypeChange,
+      ordinaryPersonTypeChange,
       provinceChange,
       regionChange,
       onSetOccupationalID,
@@ -1100,7 +1236,8 @@ export default defineComponent({
       getSelectorDataList,
       getRegionList,
       getStreetList,
-      dayjs
+      dayjs,
+      educationalSystemBlur
     }
   },
   mounted(){

+ 40 - 0
src/main/java/com/hz/employmentsite/model/PcJobuser.java

@@ -99,6 +99,14 @@ public class PcJobuser {
 
     private String latitude;
 
+    private Integer educationalSystem;
+
+    private Integer difficultSituationID;
+
+    private Integer ordinaryPersonTypeID;
+
+    private String esHouseholdRegistration;
+
     public String getJobuserID() {
         return jobuserID;
     }
@@ -482,4 +490,36 @@ public class PcJobuser {
     public void setLatitude(String latitude) {
         this.latitude = latitude == null ? null : latitude.trim();
     }
+
+    public Integer getEducationalSystem() {
+        return educationalSystem;
+    }
+
+    public void setEducationalSystem(Integer educationalSystem) {
+        this.educationalSystem = educationalSystem;
+    }
+
+    public Integer getDifficultSituationID() {
+        return difficultSituationID;
+    }
+
+    public void setDifficultSituationID(Integer difficultSituationID) {
+        this.difficultSituationID = difficultSituationID;
+    }
+
+    public Integer getOrdinaryPersonTypeID() {
+        return ordinaryPersonTypeID;
+    }
+
+    public void setOrdinaryPersonTypeID(Integer ordinaryPersonTypeID) {
+        this.ordinaryPersonTypeID = ordinaryPersonTypeID;
+    }
+
+    public String getEsHouseholdRegistration() {
+        return esHouseholdRegistration;
+    }
+
+    public void setEsHouseholdRegistration(String esHouseholdRegistration) {
+        this.esHouseholdRegistration = esHouseholdRegistration == null ? null : esHouseholdRegistration.trim();
+    }
 }

+ 250 - 0
src/main/java/com/hz/employmentsite/model/PcJobuserExample.java

@@ -3304,6 +3304,256 @@ public class PcJobuserExample {
             addCriterion("Latitude not between", value1, value2, "latitude");
             return (Criteria) this;
         }
+
+        public Criteria andEducationalSystemIsNull() {
+            addCriterion("EducationalSystem is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemIsNotNull() {
+            addCriterion("EducationalSystem is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemEqualTo(Integer value) {
+            addCriterion("EducationalSystem =", value, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemNotEqualTo(Integer value) {
+            addCriterion("EducationalSystem <>", value, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemGreaterThan(Integer value) {
+            addCriterion("EducationalSystem >", value, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemGreaterThanOrEqualTo(Integer value) {
+            addCriterion("EducationalSystem >=", value, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemLessThan(Integer value) {
+            addCriterion("EducationalSystem <", value, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemLessThanOrEqualTo(Integer value) {
+            addCriterion("EducationalSystem <=", value, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemIn(List<Integer> values) {
+            addCriterion("EducationalSystem in", values, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemNotIn(List<Integer> values) {
+            addCriterion("EducationalSystem not in", values, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemBetween(Integer value1, Integer value2) {
+            addCriterion("EducationalSystem between", value1, value2, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andEducationalSystemNotBetween(Integer value1, Integer value2) {
+            addCriterion("EducationalSystem not between", value1, value2, "educationalSystem");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDIsNull() {
+            addCriterion("DifficultSituationID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDIsNotNull() {
+            addCriterion("DifficultSituationID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDEqualTo(Integer value) {
+            addCriterion("DifficultSituationID =", value, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDNotEqualTo(Integer value) {
+            addCriterion("DifficultSituationID <>", value, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDGreaterThan(Integer value) {
+            addCriterion("DifficultSituationID >", value, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDGreaterThanOrEqualTo(Integer value) {
+            addCriterion("DifficultSituationID >=", value, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDLessThan(Integer value) {
+            addCriterion("DifficultSituationID <", value, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDLessThanOrEqualTo(Integer value) {
+            addCriterion("DifficultSituationID <=", value, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDIn(List<Integer> values) {
+            addCriterion("DifficultSituationID in", values, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDNotIn(List<Integer> values) {
+            addCriterion("DifficultSituationID not in", values, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDBetween(Integer value1, Integer value2) {
+            addCriterion("DifficultSituationID between", value1, value2, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andDifficultSituationIDNotBetween(Integer value1, Integer value2) {
+            addCriterion("DifficultSituationID not between", value1, value2, "difficultSituationID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDIsNull() {
+            addCriterion("OrdinaryPersonTypeID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDIsNotNull() {
+            addCriterion("OrdinaryPersonTypeID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDEqualTo(Integer value) {
+            addCriterion("OrdinaryPersonTypeID =", value, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDNotEqualTo(Integer value) {
+            addCriterion("OrdinaryPersonTypeID <>", value, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDGreaterThan(Integer value) {
+            addCriterion("OrdinaryPersonTypeID >", value, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDGreaterThanOrEqualTo(Integer value) {
+            addCriterion("OrdinaryPersonTypeID >=", value, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDLessThan(Integer value) {
+            addCriterion("OrdinaryPersonTypeID <", value, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDLessThanOrEqualTo(Integer value) {
+            addCriterion("OrdinaryPersonTypeID <=", value, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDIn(List<Integer> values) {
+            addCriterion("OrdinaryPersonTypeID in", values, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDNotIn(List<Integer> values) {
+            addCriterion("OrdinaryPersonTypeID not in", values, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDBetween(Integer value1, Integer value2) {
+            addCriterion("OrdinaryPersonTypeID between", value1, value2, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrdinaryPersonTypeIDNotBetween(Integer value1, Integer value2) {
+            addCriterion("OrdinaryPersonTypeID not between", value1, value2, "ordinaryPersonTypeID");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationIsNull() {
+            addCriterion("EsHouseholdRegistration is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationIsNotNull() {
+            addCriterion("EsHouseholdRegistration is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationEqualTo(String value) {
+            addCriterion("EsHouseholdRegistration =", value, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationNotEqualTo(String value) {
+            addCriterion("EsHouseholdRegistration <>", value, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationGreaterThan(String value) {
+            addCriterion("EsHouseholdRegistration >", value, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationGreaterThanOrEqualTo(String value) {
+            addCriterion("EsHouseholdRegistration >=", value, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationLessThan(String value) {
+            addCriterion("EsHouseholdRegistration <", value, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationLessThanOrEqualTo(String value) {
+            addCriterion("EsHouseholdRegistration <=", value, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationLike(String value) {
+            addCriterion("EsHouseholdRegistration like", value, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationNotLike(String value) {
+            addCriterion("EsHouseholdRegistration not like", value, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationIn(List<String> values) {
+            addCriterion("EsHouseholdRegistration in", values, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationNotIn(List<String> values) {
+            addCriterion("EsHouseholdRegistration not in", values, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationBetween(String value1, String value2) {
+            addCriterion("EsHouseholdRegistration between", value1, value2, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
+
+        public Criteria andEsHouseholdRegistrationNotBetween(String value1, String value2) {
+            addCriterion("EsHouseholdRegistration not between", value1, value2, "esHouseholdRegistration");
+            return (Criteria) this;
+        }
     }
 
     public static class Criteria extends GeneratedCriteria {

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

@@ -525,6 +525,10 @@ public class JobUserServiceImpl implements JobUserService {
                 dbData.setNativePlace(data.getNativePlace());
                 dbData.setLongitude(data.getLongitude());
                 dbData.setLatitude(data.getLatitude());
+                dbData.setEducationalSystem(data.getEducationalSystem());
+                dbData.setDifficultSituationID(data.getDifficultSituationID());
+                dbData.setOrdinaryPersonTypeID(data.getOrdinaryPersonTypeID());
+                dbData.setEsHouseholdRegistration(data.getEsHouseholdRegistration());
                 dbData.setCreateTime(new Date());
                 dbData.setCreateUserID(userId);
                 result = pcJobuserMapper.insert(dbData);
@@ -576,6 +580,10 @@ public class JobUserServiceImpl implements JobUserService {
             dbData.setNativePlace(data.getNativePlace());
             dbData.setLongitude(data.getLongitude());
             dbData.setLatitude(data.getLatitude());
+            dbData.setEducationalSystem(data.getEducationalSystem());
+            dbData.setDifficultSituationID(data.getDifficultSituationID());
+            dbData.setOrdinaryPersonTypeID(data.getOrdinaryPersonTypeID());
+            dbData.setEsHouseholdRegistration(data.getEsHouseholdRegistration());
             dbData.setModifyTime(new Date());
             dbData.setModifyUserID(userId);
             result = pcJobuserMapper.updateByPrimaryKey(dbData);
@@ -612,8 +620,12 @@ public class JobUserServiceImpl implements JobUserService {
         List<SysDictionaryItem> dicJobUserGenderList = dictionaryService.getDictionaryItemList("Gender");
         //重点人员类别
         List<SysDictionaryItem> dicKeyPersonTypeList = dictionaryService.getDictionaryItemList("KeyPersonType");
+        // 普通人员类别
+        List<SysDictionaryItem> ordinaryPersonTypeList = dictionaryService.getDictionaryItemList("OrdinaryPersonType");
         //就业状态
         List<SysDictionaryItem> dicJobStatusList = dictionaryService.getDictionaryItemList("JobStatus");
+        // 困难状况
+        List<SysDictionaryItem> difficultSituationList = dictionaryService.getDictionaryItemList("DifficultSituation");
         //所属驿站
         PcSite curLoginUserSiteInfo = null;
         PcSiteUserExample siteUserExp = new PcSiteUserExample();
@@ -756,12 +768,27 @@ public class JobUserServiceImpl implements JobUserService {
             else {
                 item.setKeyPersonTypeID(dicKeyPersonTypeList.stream().filter(it -> it.getName().equals(item.getKeyPersonTypeName().trim()))
                         .findFirst().orElse(new SysDictionaryItem()).getValue());
-                if (item.getKeyPersonTypeID() == null || item.getKeyPersonTypeID() == 0)
+                if (item.getKeyPersonTypeID() == null){
                     errorInfo += "重点人员类别不存在!";
+                }
+            }
+            if (stringUtils.IsNullOrEmpty(item.getOrdinaryPersonTypeName()))
+                errorInfo += "请选择人员类别!";
+            else {
+                item.setOrdinaryPersonTypeID(ordinaryPersonTypeList.stream().filter(it -> it.getName().equals(item.getOrdinaryPersonTypeName().trim()))
+                        .findFirst().orElse(new SysDictionaryItem()).getValue());
+                if (item.getOrdinaryPersonTypeID() == null)
+                    errorInfo += "人员类别不存在!";
                 else {
-                    if(item.getKeyPersonTypeID().equals(2)&&stringUtils.IsNullOrEmpty(item.getFinishDate())){
+                    if(item.getOrdinaryPersonTypeID().equals(2) && stringUtils.IsNullOrEmpty(item.getFinishDate())){
                         errorInfo += "应届高校毕业生必须填写毕业日期!";
                     }
+                    if(item.getOrdinaryPersonTypeID().equals(2) && item.getEducationalSystem() == null){
+                        errorInfo += "应届高校毕业生必须填写学制!";
+                    }
+                    if(item.getOrdinaryPersonTypeID().equals(2) && stringUtils.IsNullOrEmpty(item.getFinishSchool())){
+                        errorInfo += "应届高校毕业生必须填写毕业院校!";
+                    }
                 }
             }
 
@@ -800,6 +827,14 @@ public class JobUserServiceImpl implements JobUserService {
                     errorInfo += "是否全日制不存在!";
             }
 
+            if (!stringUtils.IsNullOrEmpty(item.getDifficultSituationName())){
+                item.setDifficultSituationID(difficultSituationList.stream().filter(it -> it.getName().equals(item.getDifficultSituationName().trim()))
+                        .findFirst().orElse(new SysDictionaryItem()).getValue());
+                if (item.getDifficultSituationID() == null){
+                    errorInfo += "困难状况不存在!";
+                }
+            }
+
             if (!stringUtils.IsNullOrEmpty(item.getOccupationalCategoryName())){
                 item.setOccupationalCategory(secondLevelOcCategoryList.stream().filter(it -> it.getName().equals(item.getOccupationalCategoryName().trim()))
                         .findFirst().orElse(new SysDictionaryItem()).getCode());

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

@@ -139,6 +139,15 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
                 result[0] = pcRecommendMgtMapper.insert(x);
             });
 
+            // 修改求职人员的求职状态
+            PcJobhunt pcJobhunt = pcJobhuntMapper.selectByPrimaryKey(list.get(0).getJobHuntID());
+            PcJobuser pcJobuser = pcJobuserMapper.selectByPrimaryKey(pcJobhunt.getJobUserID());
+            if (pcJobuser.getJobStatusID() != 1 && pcJobuser.getJobStatusID() != 4) {
+                // 当就业状态不是已就业,修改该求职人员的求职状态为推荐中
+                pcJobuser.setJobStatusID(4);
+                pcJobuserMapper.updateByPrimaryKey(pcJobuser);
+            }
+
 //            serviceList.forEach(item -> {
 //                jobUserServiceService.save(item, userID);
 //            });

+ 10 - 0
src/main/java/com/hz/employmentsite/vo/jobUserManager/JobUserVo.java

@@ -148,4 +148,14 @@ public class JobUserVo {
 
     public String longitude;
     public String latitude;
+
+    public Integer educationalSystem;
+
+    public Integer difficultSituationID;
+    public String difficultSituationName;
+
+    public Integer ordinaryPersonTypeID;
+    public String ordinaryPersonTypeName;
+
+    public String esHouseholdRegistration;
 }

+ 70 - 5
src/main/resources/mapping/PcJobuserMapper.xml

@@ -50,6 +50,10 @@
     <result column="OccupationalLevel" jdbcType="INTEGER" property="occupationalLevel" />
     <result column="Longitude" jdbcType="VARCHAR" property="longitude" />
     <result column="Latitude" jdbcType="VARCHAR" property="latitude" />
+    <result column="EducationalSystem" jdbcType="INTEGER" property="educationalSystem" />
+    <result column="DifficultSituationID" jdbcType="INTEGER" property="difficultSituationID" />
+    <result column="OrdinaryPersonTypeID" jdbcType="INTEGER" property="ordinaryPersonTypeID" />
+    <result column="EsHouseholdRegistration" jdbcType="VARCHAR" property="esHouseholdRegistration" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <where>
@@ -116,7 +120,8 @@
     UserMobile, Address, FamilyAddress, PostalCode, Email, Hobby, JobStatusID, KeyPersonTypeID, 
     PersonalSkills, CreateUserID, CreateTime, ModifyUserID, ModifyTime, openId, IsAppInsert, 
     SocialSecurityCard, FinishSchool, FinishDate, Profession, NativePlace, IsFullTime, 
-    OccupationalCategory, OccupationalLevel, Longitude, Latitude
+    OccupationalCategory, OccupationalLevel, Longitude, Latitude, EducationalSystem, 
+    DifficultSituationID, OrdinaryPersonTypeID, EsHouseholdRegistration
   </sql>
   <select id="selectByExample" parameterType="com.hz.employmentsite.model.PcJobuserExample" resultMap="BaseResultMap">
     select
@@ -164,7 +169,9 @@
       openId, IsAppInsert, SocialSecurityCard, 
       FinishSchool, FinishDate, Profession, 
       NativePlace, IsFullTime, OccupationalCategory, 
-      OccupationalLevel, Longitude, Latitude
+      OccupationalLevel, Longitude, Latitude, 
+      EducationalSystem, DifficultSituationID, 
+      OrdinaryPersonTypeID, EsHouseholdRegistration
       )
     values (#{jobuserID,jdbcType=VARCHAR}, #{siteID,jdbcType=VARCHAR}, #{identityNumber,jdbcType=VARCHAR}, 
       #{name,jdbcType=VARCHAR}, #{pyName,jdbcType=VARCHAR}, #{engName,jdbcType=VARCHAR}, 
@@ -181,7 +188,9 @@
       #{openId,jdbcType=VARCHAR}, #{isAppInsert,jdbcType=INTEGER}, #{socialSecurityCard,jdbcType=VARCHAR}, 
       #{finishSchool,jdbcType=VARCHAR}, #{finishDate,jdbcType=VARCHAR}, #{profession,jdbcType=VARCHAR}, 
       #{nativePlace,jdbcType=VARCHAR}, #{isFullTime,jdbcType=INTEGER}, #{occupationalCategory,jdbcType=VARCHAR}, 
-      #{occupationalLevel,jdbcType=INTEGER}, #{longitude,jdbcType=VARCHAR}, #{latitude,jdbcType=VARCHAR}
+      #{occupationalLevel,jdbcType=INTEGER}, #{longitude,jdbcType=VARCHAR}, #{latitude,jdbcType=VARCHAR}, 
+      #{educationalSystem,jdbcType=INTEGER}, #{difficultSituationID,jdbcType=INTEGER}, 
+      #{ordinaryPersonTypeID,jdbcType=INTEGER}, #{esHouseholdRegistration,jdbcType=VARCHAR}
       )
   </insert>
   <insert id="insertSelective" parameterType="com.hz.employmentsite.model.PcJobuser">
@@ -331,6 +340,18 @@
       <if test="latitude != null">
         Latitude,
       </if>
+      <if test="educationalSystem != null">
+        EducationalSystem,
+      </if>
+      <if test="difficultSituationID != null">
+        DifficultSituationID,
+      </if>
+      <if test="ordinaryPersonTypeID != null">
+        OrdinaryPersonTypeID,
+      </if>
+      <if test="esHouseholdRegistration != null">
+        EsHouseholdRegistration,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="jobuserID != null">
@@ -477,6 +498,18 @@
       <if test="latitude != null">
         #{latitude,jdbcType=VARCHAR},
       </if>
+      <if test="educationalSystem != null">
+        #{educationalSystem,jdbcType=INTEGER},
+      </if>
+      <if test="difficultSituationID != null">
+        #{difficultSituationID,jdbcType=INTEGER},
+      </if>
+      <if test="ordinaryPersonTypeID != null">
+        #{ordinaryPersonTypeID,jdbcType=INTEGER},
+      </if>
+      <if test="esHouseholdRegistration != null">
+        #{esHouseholdRegistration,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.hz.employmentsite.model.PcJobuserExample" resultType="java.lang.Long">
@@ -632,6 +665,18 @@
       <if test="row.latitude != null">
         Latitude = #{row.latitude,jdbcType=VARCHAR},
       </if>
+      <if test="row.educationalSystem != null">
+        EducationalSystem = #{row.educationalSystem,jdbcType=INTEGER},
+      </if>
+      <if test="row.difficultSituationID != null">
+        DifficultSituationID = #{row.difficultSituationID,jdbcType=INTEGER},
+      </if>
+      <if test="row.ordinaryPersonTypeID != null">
+        OrdinaryPersonTypeID = #{row.ordinaryPersonTypeID,jdbcType=INTEGER},
+      </if>
+      <if test="row.esHouseholdRegistration != null">
+        EsHouseholdRegistration = #{row.esHouseholdRegistration,jdbcType=VARCHAR},
+      </if>
     </set>
     <if test="example != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -686,7 +731,11 @@
       OccupationalCategory = #{row.occupationalCategory,jdbcType=VARCHAR},
       OccupationalLevel = #{row.occupationalLevel,jdbcType=INTEGER},
       Longitude = #{row.longitude,jdbcType=VARCHAR},
-      Latitude = #{row.latitude,jdbcType=VARCHAR}
+      Latitude = #{row.latitude,jdbcType=VARCHAR},
+      EducationalSystem = #{row.educationalSystem,jdbcType=INTEGER},
+      DifficultSituationID = #{row.difficultSituationID,jdbcType=INTEGER},
+      OrdinaryPersonTypeID = #{row.ordinaryPersonTypeID,jdbcType=INTEGER},
+      EsHouseholdRegistration = #{row.esHouseholdRegistration,jdbcType=VARCHAR}
     <if test="example != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -835,6 +884,18 @@
       <if test="latitude != null">
         Latitude = #{latitude,jdbcType=VARCHAR},
       </if>
+      <if test="educationalSystem != null">
+        EducationalSystem = #{educationalSystem,jdbcType=INTEGER},
+      </if>
+      <if test="difficultSituationID != null">
+        DifficultSituationID = #{difficultSituationID,jdbcType=INTEGER},
+      </if>
+      <if test="ordinaryPersonTypeID != null">
+        OrdinaryPersonTypeID = #{ordinaryPersonTypeID,jdbcType=INTEGER},
+      </if>
+      <if test="esHouseholdRegistration != null">
+        EsHouseholdRegistration = #{esHouseholdRegistration,jdbcType=VARCHAR},
+      </if>
     </set>
     where JobuserID = #{jobuserID,jdbcType=VARCHAR}
   </update>
@@ -886,7 +947,11 @@
       OccupationalCategory = #{occupationalCategory,jdbcType=VARCHAR},
       OccupationalLevel = #{occupationalLevel,jdbcType=INTEGER},
       Longitude = #{longitude,jdbcType=VARCHAR},
-      Latitude = #{latitude,jdbcType=VARCHAR}
+      Latitude = #{latitude,jdbcType=VARCHAR},
+      EducationalSystem = #{educationalSystem,jdbcType=INTEGER},
+      DifficultSituationID = #{difficultSituationID,jdbcType=INTEGER},
+      OrdinaryPersonTypeID = #{ordinaryPersonTypeID,jdbcType=INTEGER},
+      EsHouseholdRegistration = #{esHouseholdRegistration,jdbcType=VARCHAR}
     where JobuserID = #{jobuserID,jdbcType=VARCHAR}
   </update>
 </mapper>

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

@@ -12,7 +12,8 @@
         sys_occ_level.Name as occupationalLevelName,sys_blood_type.Name as bloodTypeName,sys_marital_status.Name as
         MaritalStatusName, sys_nation.Name as nationName, modifyUser.Name as modifyUserName,createUser.`Name` as createUserName,
         area_region.name as RegionName,area_street.name as StreetName,
-        recommendCountData.RecommendedCount,jobhuntCountData.jobHuntCount
+        recommendCountData.RecommendedCount,jobhuntCountData.jobHuntCount, ordinaryPersonType.`name` as ordinaryPersonTypeName,
+        difficultSituation.`name` as difficultSituationName
         from pc_jobuser jobuser
         left join pc_site site on site.SiteID = jobuser.SiteID
         left join sys_dictionary_item culture on jobuser.CultureRank = culture.value and
@@ -22,6 +23,10 @@
         jobstatus.DictionaryCode='JobStatus'
         left join sys_dictionary_item keytype on jobuser.KeyPersonTypeID = keytype.value and
         keytype.DictionaryCode='KeyPersonType'
+        left join sys_dictionary_item ordinaryPersonType on jobuser.ordinaryPersonTypeID = ordinaryPersonType.`value` and
+        ordinaryPersonType.DictionaryCode='OrdinaryPersonType'
+        left join sys_dictionary_item difficultSituation on jobuser.difficultSituationID = difficultSituation.`value` and
+        difficultSituation.DictionaryCode='DifficultSituation'
         left join (select * from sys_dictionary_item where DictionaryCode ='PoliticsStatus') sys_politics on
         jobuser.PoliticsStatusID = sys_politics.Value
         left join (select * from sys_dictionary_item where DictionaryCode ='Health') sys_health on

BIN
src/main/resources/static/doc/template/求职人员导入模板.xlsx


+ 8 - 6
vue/src/layout/logo/index.vue

@@ -37,12 +37,14 @@ function getAvtImag(fileRefID) {
     if (!res) {
       avtImageUrl.value = false;
     } else {
-      // 获取图片
-      getFileBase64({fileId: res[0].fileId}).then(data => {
-        if (data) {
-          avtImageUrl.value = URL.createObjectURL(base64ToBlob("data:image/png;base64," + data));
-        }
-      })
+      if (res[0] && res[0].fileId) {
+        // 获取图片
+        getFileBase64({fileId: res[0].fileId}).then(data => {
+          if (data) {
+            avtImageUrl.value = URL.createObjectURL(base64ToBlob("data:image/png;base64," + data));
+          }
+        })
+      }
     }
   })
 }

+ 82 - 30
vue/src/views/jobUserManager/jobuser/edit.vue

@@ -46,11 +46,27 @@
               :options="keyPersonTypeList"
               :field-names="{ label: 'name', value: 'value' }"
               :allow-clear="true"
-              @change="keyPersonTypeChange"
             >
             </a-select>
           </a-form-item>
         </a-col>
+        <a-col :span="8">
+          <a-form-item label="人员类别" :label-col="{span:6}" name="ordinaryPersonTypeID"
+                       :rules="[{ required: true, message: '请选择人员类别!' }]">
+            <a-select
+              ref="select"
+              v-model:value="dataModel.ordinaryPersonTypeID"
+              :options="ordinaryPersonTypeList"
+              :field-names="{ label: 'name', value: 'value' }"
+              :allow-clear="true"
+              @change="ordinaryPersonTypeChange"
+            >
+            </a-select>
+          </a-form-item>
+        </a-col>
+      </a-row>
+
+      <a-row :gutter="24">
         <a-col :span="8">
           <a-form-item label="就业状态" :label-col="{span:6}" name="jobStatusID"
                        :rules="[{ required: true, message: '请选择就业状态!' }]">
@@ -64,9 +80,6 @@
             </a-select>
           </a-form-item>
         </a-col>
-      </a-row>
-
-      <a-row :gutter="24">
         <a-col :span="8">
           <a-form-item label="所属驿站" :label-col="{span:6}" name="siteID"
                        :rules="[{ required: true, message: '请选择所属驿站!' }]">
@@ -81,12 +94,7 @@
             </a-select>
           </a-form-item>
         </a-col>
-        <a-col :span="8">
-          <a-form-item label="毕业日期" :label-col="{ span: 6 }"
-                       name="finishDate" :rules="[{ required: isGraduating,message: '请选择毕业日期!' }]">
-            <a-date-picker v-model:value="dataModel.finishDate" picker="month" value-format="YYYY-MM"/>
-          </a-form-item>
-        </a-col>
+
         <a-col :span="8">
           <a-form-item
             label="联系人"
@@ -106,10 +114,10 @@
         </a-col>
         <a-col :span="8">
           <a-form-item
-            label="地址"
+            label="常住地址"
             :label-col="{ span: 6 }"
             name="address"
-            :rules="[{ required: true, message: '请输入地址!' }]"
+            :rules="[{ required: true, message: '请输入常住地址!' }]"
           >
             <a-input v-model:value="dataModel.address" placeholder="" @blur="addressChange"/>
           </a-form-item>
@@ -124,16 +132,18 @@
         </a-col>
       </a-row>
 
-      <a-divider orientation="left">其他信息</a-divider>
+      <a-divider orientation="left">大学基础信息</a-divider>
       <a-row :gutter="24">
         <a-col :span="8">
-          <a-form-item label="社会保障卡号" :label-col="{ span: 6 }" name="socialSecurityCard">
-            <a-input v-model:value="dataModel.socialSecurityCard" placeholder=""/>
+          <a-form-item label="毕业院校" :label-col="{span:6}" name="finishSchool"
+                       :rules="[{ required: isGraduating,message: '请输入毕业院校!' }]">
+            <a-input v-model:value="dataModel.finishSchool" placeholder=""/>
           </a-form-item>
         </a-col>
         <a-col :span="8">
-          <a-form-item label="毕业院校" :label-col="{span:6}" name="finishSchool">
-            <a-input v-model:value="dataModel.finishSchool" placeholder=""/>
+          <a-form-item label="是否全日制" :label-col="{ span: 6 }" name="isFullTime">
+            <a-select ref="select" v-model:value="dataModel.isFullTime" :options="isFullTimeList"
+                      :field-names="{ label: 'name', value: 'value' }" :allow-clear="false"></a-select>
           </a-form-item>
         </a-col>
         <a-col :span="8">
@@ -144,11 +154,40 @@
       </a-row>
       <a-row :gutter="24">
         <a-col :span="8">
-          <a-form-item label="是否全日制" :label-col="{ span: 6 }" name="isFullTime">
-            <a-select ref="select" v-model:value="dataModel.isFullTime" :options="isFullTimeList"
+          <a-form-item label="学制(年)" :label-col="{ span: 6 }" name="educationalSystem"
+                       :rules="[{ required: isGraduating,message: '请输入学制!' }]">
+            <a-input-number v-model:value="dataModel.educationalSystem" placeholder="" style="width: 100%"
+                            :controls="false"/>
+          </a-form-item>
+        </a-col>
+        <a-col :span="8">
+          <a-form-item label="毕业日期" :label-col="{ span: 6 }"
+                       name="finishDate" :rules="[{ required: isGraduating,message: '请选择毕业日期!' }]">
+            <a-date-picker v-model:value="dataModel.finishDate" picker="month" value-format="YYYY-MM"/>
+          </a-form-item>
+        </a-col>
+        <a-col :span="8">
+          <a-form-item label="困难状况" :label-col="{ span: 6 }" name="difficultSituationID">
+            <a-select ref="select" v-model:value="dataModel.difficultSituationID" :options="difficultSituationList"
                       :field-names="{ label: 'name', value: 'value' }" :allow-clear="false"></a-select>
           </a-form-item>
         </a-col>
+      </a-row>
+      <a-row :gutter="24">
+        <a-col :span="8">
+          <a-form-item label="入学前户口所在地" :label-col="{ span: 6 }" name="esHouseholdRegistration">
+            <a-input v-model:value="dataModel.esHouseholdRegistration" placeholder=""/>
+          </a-form-item>
+        </a-col>
+      </a-row>
+
+      <a-divider orientation="left">其他信息</a-divider>
+      <a-row :gutter="24">
+        <a-col :span="8">
+          <a-form-item label="社会保障卡号" :label-col="{ span: 6 }" name="socialSecurityCard">
+            <a-input v-model:value="dataModel.socialSecurityCard" placeholder=""/>
+          </a-form-item>
+        </a-col>
         <a-col :span="8">
           <a-form-item label="职业资格类别" :label-col="{span:6}" name="occupationalCategoryName">
             <a-cascader :load-data="loadLevelOccupationalCategoryList"
@@ -298,7 +337,7 @@
 
       <a-row :gutter="24">
         <a-col :span="8">
-          <a-form-item label="市/县" :label-col="{span:6}" name="regionCode">
+          <a-form-item label="常住市/县" :label-col="{span:6}" name="regionCode">
             <a-select
               ref="select"
               v-model:value="dataModel.regionCode"
@@ -311,7 +350,7 @@
           </a-form-item>
         </a-col>
         <a-col :span="8">
-          <a-form-item label="镇街" :label-col="{span:6}" name="streetCode">
+          <a-form-item label="常住街镇" :label-col="{span:6}" name="streetCode">
             <a-select
               ref="select"
               v-model:value="dataModel.streetCode"
@@ -324,7 +363,7 @@
         </a-col>
         <a-col :span="8">
           <a-form-item
-            label="家庭住址"
+            label="户籍详细地址"
             :label-col="{ span: 6 }"
             name="familyAddress">
             <a-input v-model:value="dataModel.familyAddress" placeholder=""/>
@@ -572,6 +611,7 @@ export default defineComponent(
       const siteList = ref<any>([]);
       const genderList = ref<SelectProps['options']>();
       const keyPersonTypeList = ref<SelectProps['options']>();
+      const ordinaryPersonTypeList = ref<SelectProps['options']>();
       const jobStatusList = ref<SelectProps['options']>();
       const maritalStatusList = ref<SelectProps['options']>();
       const healthList = ref<SelectProps['options']>();
@@ -585,6 +625,7 @@ export default defineComponent(
       const isFullTimeList = ref<SelectProps["options"]>();
       const occupationalCategoryList = ref<SelectProps["options"]>();
       const occupationalLevelList = ref<SelectProps["options"]>();
+      const difficultSituationList = ref<SelectProps["options"]>();
 
       const educationData = ref([]);
       const educationColumns: TableColumnsType = [
@@ -733,6 +774,11 @@ export default defineComponent(
           keyPersonTypeList.value = data;
         });
       };
+      const getOrdinaryPersonType = () => {
+        getSysDictionaryList('OrdinaryPersonType').then((data) => {
+          ordinaryPersonTypeList.value = data;
+        });
+      };
       const getMaritalStatusList = () => {
         getSysDictionaryList('MaritalStatus').then((data) => {
           maritalStatusList.value = data;
@@ -751,6 +797,10 @@ export default defineComponent(
         const result: any = await getSysDictionaryList("OccupationalLevel");
         occupationalLevelList.value = result;
       }
+      const getDifficultSituationList = async function () {
+        const result: any = await getSysDictionaryList("DifficultSituation");
+        difficultSituationList.value = result;
+      }
 
 
       get('system/area/getCityList', {}).then(data => {
@@ -977,6 +1027,8 @@ export default defineComponent(
         getIsFullTimeList()
         getOccupationalLevelList()
         getFirstOccupationalList()
+        getOrdinaryPersonType();
+        getDifficultSituationList();
         getInfo().then((loginUserInfo:any)=>{
           getDataById(id,loginUserInfo.userID,true).then(data => {
             formState.dataModel = data;
@@ -985,19 +1037,17 @@ export default defineComponent(
             if (formState.dataModel.regionCode) {
               changeCity();
             }
-            if(formState.dataModel.keyPersonTypeID==2){
+            if (formState.dataModel.ordinaryPersonTypeID == 2) {
               isGraduating.value = true;
             }
           });
         });
       };
 
-      const isGraduating = ref(false);
-      const keyPersonTypeChange = function (){
-        isGraduating.value = false;
-        if(formState.dataModel.keyPersonTypeID==2){
-          isGraduating.value = true;
-        }
+      const isGraduating = ref(false); // 大学基础信息是否为必填
+      const ordinaryPersonTypeChange = function () {
+        // 如果是应届高校毕业生,则大学基础信息部分字段为必填
+        isGraduating.value = formState.dataModel.ordinaryPersonTypeID == 2;
       }
 
       // 所属驿站变更关联区县
@@ -1034,7 +1084,7 @@ export default defineComponent(
         onIdentityNumberChange,
         onSelectModel,
         selectLabelChecks,
-        keyPersonTypeChange,
+        ordinaryPersonTypeChange,
         siteChange,
         isGraduating,
         refSelectModel,
@@ -1054,6 +1104,7 @@ export default defineComponent(
         experienceData,
         formTableState,
         keyPersonTypeList,
+        ordinaryPersonTypeList,
         politicsStatusList,
         changeCity,
         regionChange,
@@ -1066,6 +1117,7 @@ export default defineComponent(
         isFullTimeList,
         occupationalCategoryList,
         occupationalLevelList,
+        difficultSituationList,
         loadLevelOccupationalCategoryList,
         occupationalChange,
         addressChange,

+ 9 - 5
vue/src/views/jobUserManager/jobuser/index.vue

@@ -258,7 +258,7 @@ export default defineComponent({
       {title: '毕业日期', dataIndex: 'finishDate', key: 'finishDate', align: "center", isDefaultClose: true},
       {title: '民族', dataIndex: 'nationName', key: 'nationName', width: 80, align: "center", isDefaultClose: true},
       {title: '最高学历', dataIndex: 'cultureName', key: 'cultureName', align: "center", isDefaultClose: true},
-      {title: '地址', dataIndex: 'address', key: 'address', align: "center", isDefaultClose: true},
+      {title: '常住地址', dataIndex: 'address', key: 'address', align: "center", isDefaultClose: true},
       {title: '操作', key: 'operation', width: 240, align: 'center', isDisabled: true},
     ];
     // 响应式表格定义
@@ -279,20 +279,24 @@ export default defineComponent({
         {cnName: '出生日期', enName: 'birthDayStr', width: 100},
         {cnName: '性别', enName: 'sexName', width: 80},
         {cnName: '重点人员类别', enName: 'keyPersonTypeName', width: 150},
+        {cnName: '人员类别', enName: 'ordinaryPersonTypeName', width: 150},
         {cnName: '就业状态', enName: 'jobStatusName', width: 100},
         {cnName: '所属驿站', enName: 'siteName', width: 100},
-        {cnName: '地址', enName: 'address', width: 150},
+        {cnName: '常住地址', enName: 'address', width: 150},
         {cnName: '联系电话', enName: 'userMobile', width: 120},
-        {cnName: '市/县', enName: 'regionName', width: 100},
+        {cnName: '常住市/县', enName: 'regionName', width: 100},
         {cnName: '身份证号码', enName: 'identityNumber', width: 180},
-        {cnName: '镇街', enName: 'streetName', width: 100},
+        {cnName: '常住街镇', enName: 'streetName', width: 100},
         {cnName: '省份', enName: 'provinceName', width: 100},
         {cnName: '联系人', enName: 'userName', width: 100},
         {cnName: '毕业日期', enName: 'finishDate', width: 100},
         {cnName: '籍贯', enName: 'nativePlace', width: 100},
         {cnName: '社会保障卡号', enName: 'socialSecurityCard', width: 150},
+        {cnName: '学制(年)', enName: 'educationalSystem', width: 150},
         {cnName: '毕业院校', enName: 'finishSchool', width: 150},
         {cnName: '专业', enName: 'profession', width: 150},
+        {cnName: '困难状况', enName: 'difficultSituationName', width: 150},
+        {cnName: '入学前户口所在地', enName: 'esHouseholdRegistration', width: 150},
         {cnName: '是否全日制', enName: 'isFullTimeName', width: 100},
         {cnName: '职业资格类别', enName: 'occupationalCategoryName', width: 150},
         {cnName: '职业资格等级', enName: 'occupationalLevelName', width: 200},
@@ -307,7 +311,7 @@ export default defineComponent({
         {cnName: '身高(cm)', enName: 'height', width: 100},
         {cnName: '体重(kg)', enName: 'weight', width: 100},
         {cnName: '视力', enName: 'vision', width: 100},
-        {cnName: '家庭住址', enName: 'familyAddress', width: 150},
+        {cnName: '户籍详细地址', enName: 'familyAddress', width: 150},
         {cnName: '个人评价', enName: 'hobby', width: 180},
         {cnName: '个人技能', enName: 'personalSkills', width: 180},
       ],

+ 1 - 1
vue/src/views/jobUserManager/jobuser/vitae.vue

@@ -63,7 +63,7 @@
           <a-descriptions-item label="重点人员类别">{{ jobUserInfo.keyTypeName }}</a-descriptions-item>
           <a-descriptions-item label="健康状况">{{ jobUserInfo.healthName }}</a-descriptions-item>
           <a-descriptions-item label="就业状态">{{ jobUserInfo.jobStatusName }}</a-descriptions-item>
-          <a-descriptions-item label="住址">{{ jobUserInfo.address }}</a-descriptions-item>
+          <a-descriptions-item label="址">{{ jobUserInfo.address }}</a-descriptions-item>
           <a-descriptions-item :span="2" label="个人评价">{{ jobUserInfo.hobby }}</a-descriptions-item>
           <a-descriptions-item :span="2" label="专业技术特长">{{ jobUserInfo.personalSkills }}</a-descriptions-item>
         </a-descriptions>