commit
This commit is contained in:
@@ -170,18 +170,6 @@ const signForm = {
|
|||||||
const ac = (Number(this.active) - 1)
|
const ac = (Number(this.active) - 1)
|
||||||
this.active = '' + (ac >= 0 ? ac : 0)
|
this.active = '' + (ac >= 0 ? ac : 0)
|
||||||
},
|
},
|
||||||
validFamilyForm() {
|
|
||||||
for (let i = 0; i < this.formData.mobileColumnsValue.length; i++) {
|
|
||||||
const family = this.formData.mobileColumnsValue[i]
|
|
||||||
for (const familyColumn of family) {
|
|
||||||
if(familyColumn.isRequired && !familyColumn.columnValue) {
|
|
||||||
this.$message.error('家属' + (i + 1) + '的' + familyColumn.columnName + '不能为空')
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
async validSignUp() {
|
async validSignUp() {
|
||||||
//获取家属是多少人
|
//获取家属是多少人
|
||||||
const res = await this.$axios.post("/platform/family/apply/validateSignUp", {
|
const res = await this.$axios.post("/platform/family/apply/validateSignUp", {
|
||||||
@@ -229,6 +217,135 @@ const signForm = {
|
|||||||
this.courseTypeRow = courseType
|
this.courseTypeRow = courseType
|
||||||
this.signDialog = true
|
this.signDialog = true
|
||||||
},
|
},
|
||||||
|
validateIdCard(idCard) {
|
||||||
|
if (!idCard) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 18位身份证号码校验
|
||||||
|
if (idCard.length === 18) {
|
||||||
|
const idCardRegex = /^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/
|
||||||
|
if (!idCardRegex.test(idCard)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验码计算
|
||||||
|
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
|
||||||
|
const checksums = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]
|
||||||
|
let sum = 0
|
||||||
|
for (let i = 0; i < 17; i++) {
|
||||||
|
sum += idCard[i] * weights[i]
|
||||||
|
}
|
||||||
|
const checksum = checksums[sum % 11]
|
||||||
|
return checksum === idCard[17].toUpperCase()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 15位身份证号码校验
|
||||||
|
else if (idCard.length === 15) {
|
||||||
|
const idCardRegex = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/
|
||||||
|
return idCardRegex.test(idCard)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 外国人或其他情况
|
||||||
|
else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validFamilyForm() {
|
||||||
|
// 校验规则映射
|
||||||
|
const validators = {
|
||||||
|
idCard: (value) => this.validateIdCard(value),
|
||||||
|
mobile: (value) => /^1[3-9]\d{9}$/.test(value),
|
||||||
|
email: (value) => /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value)
|
||||||
|
};
|
||||||
|
// 显示提示弹窗(直接传完整的 message)
|
||||||
|
const showAlert = (message) => {
|
||||||
|
this.$alert(message, "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
type: "warning"
|
||||||
|
})
|
||||||
|
};
|
||||||
|
const { mobileColumnsValue } = this.formData;
|
||||||
|
for (let i = 0; i < mobileColumnsValue.length; i++) {
|
||||||
|
const family = mobileColumnsValue[i];
|
||||||
|
for (const col of family) {
|
||||||
|
const value = col.columnValue?.trim(); // 安全处理空值和空格
|
||||||
|
// 必填校验
|
||||||
|
if (col.isRequired && !value) {
|
||||||
|
const message = this.activity.keyWord + (i + 1) + '的' + col.columnName + '不能为空';
|
||||||
|
showAlert(message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// 格式校验
|
||||||
|
if (col.validRule && value) {
|
||||||
|
const validator = validators[col.validRule];
|
||||||
|
if (validator && !validator(value)) {
|
||||||
|
const message = this.activity.keyWord + (i + 1) + '的' + col.columnName + '格式不正确';
|
||||||
|
showAlert(message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(col.validRule === 'idCard' && this.courseRow.familyAgeLimit) {
|
||||||
|
const parseCard = this.parseIdCard(value)
|
||||||
|
if(this.courseRow.minAge && parseCard.age < this.courseRow.minAge) {
|
||||||
|
const message = '限制报名最小年龄为' + this.courseRow.minAge;
|
||||||
|
showAlert(message);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
if(this.courseRow.maxAge && parseCard.age > this.courseRow.maxAge) {
|
||||||
|
const message = '限制报名最大年龄为' + this.courseRow.maxAge;
|
||||||
|
showAlert(message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(col.validRule === 'idCard' && this.courseRow.familySexLimit) {
|
||||||
|
const parseCard = this.parseIdCard(value)
|
||||||
|
if(this.courseRow.familySex && parseCard.sex !== this.courseRow.familySex) {
|
||||||
|
const message = '限制报名性别为' + this.courseRow.familySex;
|
||||||
|
showAlert(message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
parseIdCard(idCard) {
|
||||||
|
if (!idCard || (idCard.length !== 18 && idCard.length !== 15)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
let birthStr = '';
|
||||||
|
let sexCode = '';
|
||||||
|
|
||||||
|
if (idCard.length === 15) {
|
||||||
|
birthStr = '19' + idCard.substring(6, 12);
|
||||||
|
sexCode = idCard.substring(14, 15); // 15位:第15位是性别
|
||||||
|
} else {
|
||||||
|
birthStr = idCard.substring(6, 14);
|
||||||
|
sexCode = idCard.substring(16, 17); // 18位:第17位是性别
|
||||||
|
}
|
||||||
|
|
||||||
|
const birthYear = parseInt(birthStr.substring(0, 4), 10);
|
||||||
|
const birthMonth = parseInt(birthStr.substring(4, 6), 10) - 1;
|
||||||
|
const birthDay = parseInt(birthStr.substring(6, 8), 10);
|
||||||
|
|
||||||
|
const birthDate = new Date(birthYear, birthMonth, birthDay);
|
||||||
|
const today = new Date();
|
||||||
|
|
||||||
|
let age = today.getFullYear() - birthDate.getFullYear();
|
||||||
|
const monthDiff = today.getMonth() - birthDate.getMonth();
|
||||||
|
const dayDiff = today.getDate() - birthDate.getDate();
|
||||||
|
|
||||||
|
if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) {
|
||||||
|
age--;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sex = parseInt(sexCode, 10) % 2 === 1 ? '男' : '女';
|
||||||
|
|
||||||
|
return { age, sex, };
|
||||||
|
},
|
||||||
async onSubmit() {
|
async onSubmit() {
|
||||||
//验证家属表单
|
//验证家属表单
|
||||||
if (!this.validFamilyForm()) return
|
if (!this.validFamilyForm()) return
|
||||||
@@ -284,7 +401,7 @@ const signForm = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
style: /*language=CSS*/ `
|
style: /*language=CSS*/ `
|
||||||
.el-tabs__header {
|
::v-deep .el-tabs__header {
|
||||||
margin: 0 0 15px !important;
|
margin: 0 0 15px !important;
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|||||||
Reference in New Issue
Block a user