Procházet zdrojové kódy

对求职人员的身份证号码、联系电话、邮箱及
企业的统一信用代码、联系电话、企业邮箱的录入保存添加了验证

liao-sea před 1 rokem
rodič
revize
a6e050585a

+ 66 - 12
h5app/src/views/pages/company/edit.vue

@@ -239,6 +239,7 @@ export default defineComponent({
   setup() {
     const route = useRoute();
     const router = useRouter();
+    const isAllowCommit = ref(true);
     const curStepData = ref<StepParams>({
       name:"",
       statusVal: 1
@@ -249,17 +250,17 @@ export default defineComponent({
     const formState = reactive({
       dataModel: {
         companyID:null,
-        companyCode: null,
+        companyCode: '',
         companyName: null,
         siteID: null,
         companyAddress: null,
         userName: null,
-        userMobile: null,
+        userMobile: '',
         recordStatus: null,
         isShortage: null,
         frName: null,
         validDate: dayjs().format("YYYY-MM-DD"),
-        companyEmail: null,
+        companyEmail: '',
         companyType: null,
         companyModel: null,
         regionCode: null,
@@ -319,6 +320,55 @@ export default defineComponent({
         isLongDate.value = false;
     };
 
+    const companyCodeValidate = ()=>{
+      isAllowCommit.value = true;
+      const codeReg = /^[0-9A-Z]+$/;
+      console.log(formState.dataModel.companyCode);
+      if(formState.dataModel.companyCode.length != 18 || !codeReg.test(formState.dataModel.companyCode)){
+        presentAlert("输入的信用代码有误!");
+        isAllowCommit.value = false;
+      }else{
+        let aCode;
+        let aCodeValue;
+        let total = 0;
+        const weightedFactors = [1,3,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28];
+        const str = '0123456789ABCDEFGHJKLMNPQRTUWXY';
+        for(let i =0;i < formState.dataModel.companyCode.length-1;i++){
+          aCode = formState.dataModel.companyCode.substring(i,i+1);
+          aCodeValue = str.indexOf(aCode);
+          total += aCodeValue * weightedFactors[i];
+        }
+        let logicCheckCode = 31 - total % 31;
+        if(logicCheckCode == 31){
+           logicCheckCode = 0;
+        }
+        const Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
+        const Array_Str = Str.split(',');
+        const correctCodeStr  = Array_Str[logicCheckCode];
+        console.log("正确的校验码是",correctCodeStr);
+        const currentCodeStr = formState.dataModel.companyCode.substring(17, 18);
+        if (correctCodeStr != currentCodeStr) {
+          presentAlert('输入的统一信用代码无效!');
+          isAllowCommit.value = false;
+        }
+      }
+    }
+    const inputDataValidate = () =>{
+      const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
+      if(!mobileReg.test(formState.dataModel.userMobile)){
+        presentAlert("输入的联系电话有误!");
+        isAllowCommit.value = false;
+      }
+      const emailReg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
+      // 这里由于企业邮箱非必填所以先判断是否填写了企业邮箱
+      if(formState.dataModel.companyEmail.trim()!==""){
+        if(!emailReg.test(formState.dataModel.companyEmail)){
+          presentAlert("输入的企业邮箱有误!");
+          isAllowCommit.value = false;
+        }
+      }
+    };
+
     const onNext = async () => {
       const isFormCorrect = await v$.value.$validate();
       if (!isFormCorrect) {
@@ -328,16 +378,20 @@ export default defineComponent({
       /*const jsonStr = JSON.stringify(formState.dataModel);
       localStorage.removeItem('companyData');
       localStorage.setItem("companyData", jsonStr);*/
-      saveCompanyInfo(formState.dataModel).then(result => {
-        if (result) {
-          if(isAdd.value){
-            router.push({path: './menu', query: {reload:1,id:formState.dataModel.companyID,status:2}});
-          }
-          else{
-            router.push({path: './postList', query: {reload:1,id:formState.dataModel.companyID,status:3}});
+      companyCodeValidate();
+      inputDataValidate();
+      if(isAllowCommit.value){
+        saveCompanyInfo(formState.dataModel).then(result => {
+          if (result) {
+            if(isAdd.value){
+              router.push({path: './menu', query: {reload:1,id:formState.dataModel.companyID,status:2}});
+            }
+            else{
+              router.push({path: './postList', query: {reload:1,id:formState.dataModel.companyID,status:3}});
+            }
           }
-        }
-      });
+        });
+      }
     };
 
     const onBack=()=>{

+ 51 - 17
h5app/src/views/pages/jobhunt/edit.vue

@@ -84,15 +84,19 @@
           </ion-select>
           <ion-note slot="error">重点人员类别不能为空</ion-note>
         </ion-item>
-        <ion-item>
-          <div class="panel-title2">
+        <ion-item mode="md">
+          <div class="panel-title2" style="width: 25%;">
             <div class="item-flag"></div>
-            <span style="font-size: 16px;">其他信息</span>
+            其他信息
+          </div>
+          <div style="width: 75%;text-align: right;">
+            <ion-icon :icon="chevronDownOutline"  @click="expandChange" v-if="!expand"
+                      style="font-size: 24px;"></ion-icon>
+            <ion-icon :icon="chevronUpOutline"  @click="expandChange" v-if="expand"
+                      style="font-size: 24px;"></ion-icon>
+<!--            <img alt="" src="@/assets/icon/arrow-down-bold.png" class="iconBtn"  @click="expandChange" v-if="!expand"/>
+            <img alt="" src="@/assets/icon/arrow-up-bold.png"   class="iconBtn"  @click="expandChange" v-if="expand"/>-->
           </div>
-          <ion-avatar aria-hidden="true" slot="end" style="padding-top: 10px;" >
-            <img alt="" src="@/assets/icon/arrow-down-bold.png" class="iconBtn"  @click="expandChange" v-if="!expand"/>
-            <img alt="" src="@/assets/icon/arrow-up-bold.png"   class="iconBtn"  @click="expandChange" v-if="expand"/>
-          </ion-avatar>
         </ion-item>
         <ion-item-group v-if="expand">
           <ion-label class="title-item">民族</ion-label>
@@ -322,7 +326,7 @@
   </ion-page>
 </template>
 <script lang="ts">
-import {arrowBackOutline,addCircleOutline} from 'ionicons/icons';
+import {chevronDownOutline, chevronUpOutline,arrowBackOutline,addCircleOutline} from 'ionicons/icons';
 import {reactive,defineComponent, computed,watch,ref,toRefs} from "vue";
 import {useRoute, useRouter} from "vue-router";
 import {required} from "@vuelidate/validators";
@@ -350,6 +354,7 @@ export default defineComponent({
   setup() {
     const router = useRouter();
     const route = useRoute();
+    const isAllowCommit = ref(true);
     const expand = ref<boolean>(false);
     const loading = ref(true);
     const siteInfoList = ref<SelectProps[]>([]);
@@ -408,7 +413,7 @@ export default defineComponent({
         userName:null,
         familyAddress:null,
         postalCode:null,
-        email:null,
+        email:'',
         hobby:null,
         personalSkills:null,
       }});
@@ -422,7 +427,7 @@ export default defineComponent({
       return {baseData:{
           siteID:{required},
           name:{required},
-          identityNumber:{required},
+          identityNumber:{required:true,},
           sex:{required},
           userMobile:{required},
           address:{required},
@@ -435,6 +440,7 @@ export default defineComponent({
     const expandChange= ()=>{
       expand.value = !expand.value;
     }
+
     const presentAlert = async (message: string) => {
       const alert = await alertController.create({
         header: '错误!',
@@ -456,6 +462,31 @@ export default defineComponent({
       }
     }
 
+    const inputDataValidate = () =>{
+      isAllowCommit.value = true;
+      const identReg = /^[1-9]{1}[0-9]{14}$|^[1-9]{1}[0-9]{16}([0-9]|[xX])$/;
+      if(baseInfoData.baseData.identityNumber != null){
+        if(!identReg.test(baseInfoData.baseData.identityNumber)){
+          presentAlert("输入的身份证号码有误!");
+          isAllowCommit.value = false;
+        }
+      }
+      const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
+      if(baseInfoData.baseData.userMobile != null){
+        if(!mobileReg.test(baseInfoData.baseData.userMobile)){
+          presentAlert("输入的联系电话有误!");
+          isAllowCommit.value = false;
+        }
+      }
+      const emailReg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
+      if(baseInfoData.baseData.email.trim()!=""){
+        if(!emailReg.test(baseInfoData.baseData.email)){
+          presentAlert("输入的电子邮箱有误!");
+          isAllowCommit.value = false;
+        }
+      }
+    };
+
     const onSave = async function (){
       if (curStepData.value.statusVal==1){
         const isFormCorrect = await baseDataValid.value.$validate();
@@ -463,11 +494,14 @@ export default defineComponent({
           await presentAlert("请填写完整的信息!");
           return null;
         }
-        baseInfoSave(baseInfoData.baseData).then(result => {
-          if (result) {
-            router.push({path: './edit', query: {reload:0,jobUserID: baseInfoData.baseData.jobUserID,status:2}});
-          }
-        });
+        inputDataValidate();
+        if(isAllowCommit.value){
+          baseInfoSave(baseInfoData.baseData).then(result => {
+            if (result) {
+              router.push({path: './edit', query: {reload:0,jobUserID: baseInfoData.baseData.jobUserID,status:2}});
+            }
+          });
+        }
       }
       else if (curStepData.value.statusVal==2){
          await router.push({path: './edit', query: {reload:0,jobUserID: baseInfoData.baseData.jobUserID,status:3}});
@@ -480,8 +514,6 @@ export default defineComponent({
       router.push({path: pathValue, query: {reload:1,educationID:educationIDValue,experienceID:experienceIDValue,jobHuntID:jobHuntIDValue,jobUserID: baseInfoData.baseData.jobUserID,status:statusValue}});
     }
 
-
-
     const onScroll = (e: any) => {
         setTimeout(() => {
           e.target.complete();
@@ -594,6 +626,8 @@ export default defineComponent({
 
     return {
       ...toRefs(baseInfoData),
+      chevronDownOutline,
+      chevronUpOutline,
       arrowBackOutline,
       addCircleOutline,
       route,

+ 66 - 9
vue/src/views/companyService/company/edit.vue

@@ -151,7 +151,7 @@
             <a-select
               ref="select"
               v-model:value="dataModel.companyType"
-              :options="studentStatuslist"
+              :options="companyCategoryList"
               :field-names="{ label: 'name', value: 'value' }"
             >
             </a-select>
@@ -262,6 +262,7 @@ import {save, getCompanyById} from '@/api/companyService/company';
 import {getSiteByID} from '@/api/baseSettings/siteInfo';
 import {getSysDictionaryList} from '@/api/system/dictionary';
 import dayjs from "dayjs";
+import {message} from "ant-design-vue";
 
 interface FormState {
   dataModel: any;
@@ -271,8 +272,9 @@ export default defineComponent(
   {
     components: {BUploadFile},
     setup() {
-      const formState = reactive<FormState>({dataModel: {}});
       const router = useRouter();
+      const isAllowCommit = ref(true);
+      const formState = reactive<FormState>({dataModel: {}});
       const siteList = ref<SelectProps['options']>();
       const tabsViewStore = useTabsViewStore();
       const showPicker = ref('1');
@@ -292,6 +294,7 @@ export default defineComponent(
 
       const regionList = ref<SelectProps['options']>();
       const streetList = ref<SelectProps['options']>();
+      const companyCategoryList = ref<SelectProps['options']>();
       const companyModelList = ref<SelectProps['options']>();
       const fullPath = router.currentRoute.value.fullPath;
 
@@ -338,19 +341,72 @@ export default defineComponent(
         changeCity();
       }
 
+      const companyCodeValidate = ()=>{
+        isAllowCommit.value = true;
+        const codeReg = /^[0-9A-Z]+$/;
+        console.log(formState.dataModel.companyCode);
+        if(formState.dataModel.companyCode.length != 18 || !codeReg.test(formState.dataModel.companyCode)){
+          message.error("输入的信用代码有误!");
+          isAllowCommit.value = false;
+        }else{
+          let aCode;
+          let aCodeValue;
+          let total = 0;
+          const weightedFactors = [1,3,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28];
+          const str = '0123456789ABCDEFGHJKLMNPQRTUWXY';
+          for(let i =0;i < formState.dataModel.companyCode.length-1;i++){
+            aCode = formState.dataModel.companyCode.substring(i,i+1);
+            aCodeValue = str.indexOf(aCode);
+            total += aCodeValue * weightedFactors[i];
+          }
+          let logicCheckCode = 31 - total % 31;
+          if(logicCheckCode == 31){
+            logicCheckCode = 0;
+          }
+          const Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
+          const Array_Str = Str.split(',');
+          const correctCodeStr  = Array_Str[logicCheckCode];
+          console.log("正确的校验码是",correctCodeStr);
+          const currentCodeStr = formState.dataModel.companyCode.substring(17, 18);
+          if (correctCodeStr != currentCodeStr) {
+            message.error('输入的统一信用代码无效!');
+            isAllowCommit.value = false;
+          }
+        }
+      }
+      const inputDataValidate = () =>{
+        const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
+        if(!mobileReg.test(formState.dataModel.userMobile)){
+          message.error("输入的联系电话有误!");
+          isAllowCommit.value = false;
+        }
+        const emailReg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
+        // 这里由于邮箱非必填所以先判断是否填写了邮箱
+        if(formState.dataModel.companyEmail.trim()!==""){
+          if(!emailReg.test(formState.dataModel.companyEmail)){
+            message.error("输入的企业邮箱有误!");
+            isAllowCommit.value = false;
+          }
+        }
+      };
+
       const onFinish = () => {
         // console.log(showPicker.value);
         if (showPicker.value === '1') {
           formState.dataModel.validDate = '2099-12-31T00:00:00.000+08:00';
         } else {
           formState.dataModel.validDate = showDateTime.value;
-        }
-        save(formState.dataModel).then(result => {
-          if (result) {
-            tabsViewStore.closeCurrentTab(fullPath);
-            tabsViewStore.addTabByPath('/companyService/enterprise/index', {reload: 1});
-          }
-        })
+        };
+        companyCodeValidate();
+        inputDataValidate();
+        if(isAllowCommit.value){
+          save(formState.dataModel).then(result => {
+            if (result) {
+              tabsViewStore.closeCurrentTab(fullPath);
+              tabsViewStore.addTabByPath('/companyService/enterprise/index', {reload: 1});
+            }
+          })
+        };
       }
 
       const loadData = (id: any) => {
@@ -377,6 +433,7 @@ export default defineComponent(
         siteList,
         regionList,
         streetList,
+        companyCategoryList,
         companyModelList,
         companyStatusList,
         changeCity,

+ 48 - 20
vue/src/views/jobUserManager/jobuser/edit.vue

@@ -83,8 +83,8 @@
         </a-col>
         <a-col :span="8">
           <a-form-item label="联系电话" :label-col="{ span: 6 }"
-                       name="userMobile" :rules="[{ required: true, message: '请选择性别!' }]">
-            <a-input v-model:value="dataModel.userMobile" placeholder=""/>
+                       name="userMobile" :rules="[{ required: true,message: '请输入联系电话!' }]">
+            <a-input  v-model:value="dataModel.userMobile" placeholder=""/>
           </a-form-item>
         </a-col>
         <a-col :span="8">
@@ -443,7 +443,8 @@ import {useTabsViewStore} from '@/store/modules/tabsView';
 import BUploadFile from '@/components/file/uploadFile.vue';
 import {get} from "@/api/common";
 import { getSysDictionaryList } from '@/api/system/dictionary';
-import {save, getEducationList, getDataById, getExperienceList} from '@/api/jobUserManager/jobuser'
+import {save, getEducationList, getDataById, getExperienceList} from '@/api/jobUserManager/jobuser';
+import {message} from "ant-design-vue";
 
 interface FormState {
   dataModel: any;
@@ -453,13 +454,14 @@ export default defineComponent(
   {
     components: {BUploadFile},
     setup() {
+      // const router = useRouter();
+      const isAllowCommit = ref(true);
       const formState = reactive<FormState>({dataModel: {}});
       const formTableState = reactive({loading: false});
       const searchParams = reactive({
         pageIndex: 1,
         pageSize: 99
       });
-      // const router = useRouter();
       const provinceList = ref<SelectProps['options']>([{name: '广东省', code: '440000000000000'}]);
       const siteList = ref<SelectProps['options']>();
       const genderList = ref<SelectProps['options']>();
@@ -529,6 +531,28 @@ export default defineComponent(
         fileList.value = files;
       };
 
+      const inputDataValidate = () =>{
+        isAllowCommit.value = true;
+        const identReg = /^[1-9]{1}[0-9]{14}$|^[1-9]{1}[0-9]{16}([0-9]|[xX])$/;
+        if(!formState.dataModel.identityNumber.match(identReg)){
+          message.error("输入的身份证号码有误!");
+          isAllowCommit.value = false;
+        }
+        const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
+        if(!mobileReg.test(formState.dataModel.userMobile)){
+          message.error("输入的联系电话有误!");
+          isAllowCommit.value = false;
+        }
+        const emailReg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
+        if(formState.dataModel.email.trim()!==""){
+          if(!emailReg.test(formState.dataModel.email)){
+            message.error("输入的电子邮箱有误!");
+            isAllowCommit.value = false;
+          }
+        }
+      };
+
+
       get('/companyService/company/getSiteList', {}).then(data => {
         siteList.value = data;
       })
@@ -684,13 +708,16 @@ export default defineComponent(
 
       const onFinish = () => {
         // console.log(formState.dataModel);
-        formState.dataModel.jobEducation = educationData.value;
-        formState.dataModel.jobExperience = experienceData.value;
-        save(formState.dataModel).then(result => {
-          if (result) {
-            onClose(1)
-          }
-        });
+        inputDataValidate();
+        if(isAllowCommit.value){
+          formState.dataModel.jobEducation = educationData.value;
+          formState.dataModel.jobExperience = experienceData.value;
+          save(formState.dataModel).then(result => {
+            if (result) {
+              onClose(1)
+            }
+          });
+        }
       }
 
       const loadData = (id: any) => {
@@ -721,25 +748,26 @@ export default defineComponent(
         addEducation,
         delEducation,
         loadEducation,
+        inputDataValidate,
         siteList,
-        maritalStatusList,
-        formState,
-        formTableState,
         regionList,
-        educationData,
         streetList,
-        familyNatureList,
         cultureList,
         genderList,
         healthList,
+        jobStatusList,
+        provinceList,
+        bloodTypeList,
+        maritalStatusList,
+        familyNatureList,
+        formState,
+        educationData,
+        experienceData,
+        formTableState,
         keyPersonTypeList,
         politicsStatusList,
         changeCity,
         regionChange,
-        jobStatusList,
-        experienceData,
-        provinceList,
-        bloodTypeList,
         loadExperienceData,
         deleteExperience,
         addExperience,