import { ElMessage } from 'element-plus' import { baseinfo } from '@/data/inpatient' export function nullPatient() { const patient = baseinfo() if (patient.inpatientNo && patient.admissTimes) { return false } else { ElMessage({ message: '请先选择患者!', type: 'warning', duration: 2500, showClose: true, }) return true } } function isValidPhone(phone) { const myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/ return myreg.test(phone) } function isValidIdcard(card) { const provinces = { 11: '北京', 12: '天津', 13: '河北', 14: '山西', 15: '内蒙古', 21: '辽宁', 22: '吉林', 23: '黑龙江', 31: '上海', 32: '江苏', 33: '浙江', 34: '安徽', 35: '福建', 36: '江西', 37: '山东', 41: '河南', 42: '湖北', 43: '湖南', 44: '广东', 45: '广西', 46: '海南', 50: '重庆', 51: '四川', 52: '贵州', 53: '云南', 54: '西藏', 61: '陕西', 62: '甘肃', 63: '青海', 64: '宁夏', 65: '新疆', 71: '台湾', 81: '香港', 82: '澳门', 91: '国外', } //检查号码是否符合规范,包括长度,类型 const isCardNo = function (card) { //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X const reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/ return reg.test(card) } //取身份证前两位,校验省份 const checkProvince = function (card) { const provinceCode = card.substr(0, 2) return provinces[provinceCode] } //检查生日是否正确 const checkBirthday = function (card) { const len = card.length //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字 if (len === 15) { const re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/ let arr_data = card.match(re_fifteen) let year = arr_data[2] let month = arr_data[3] let day = arr_data[4] let birthday = new Date('19' + year + '/' + month + '/' + day) return verifyBirthday('19' + year, month, day, birthday) } //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X if (len === 18) { const re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/ let arr_data = card.match(re_eighteen) let year = arr_data[2] let month = arr_data[3] let day = arr_data[4] let birthday = new Date(year + '/' + month + '/' + day) return verifyBirthday(year, month, day, birthday) } return false } //校验日期 const verifyBirthday = function (year, month, day, birthday) { const now = new Date() var now_year = now.getFullYear() //年月日是否合理 if (birthday.getFullYear() == year && birthday.getMonth() + 1 == month && birthday.getDate() == day) { //判断年份的范围(3岁到120岁之间) var time = now_year - year return time >= 3 && time <= 120 } return false } //校验位的检测 const checkParity = function (card) { //15位转18位 card = changeFivteenToEighteen(card) const len = card.length if (len === 18) { const arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) const arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2') var cardTemp = 0, i, valnum for (i = 0; i < 17; i++) { cardTemp += card.substr(i, 1) * arrInt[i] } valnum = arrCh[cardTemp % 11] return valnum == card.substr(17, 1) } return false } //15位转18位身份证号 const changeFivteenToEighteen = function (card) { if (card.length === 15) { const arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) const arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2') var cardTemp = 0, i card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6) for (i = 0; i < 17; i++) { cardTemp += card.substr(i, 1) * arrInt[i] } card += arrCh[cardTemp % 11] return card } return card } if (!card) { return false } card = card.trim() return card !== '' && isCardNo(card) && checkProvince(card) && checkBirthday(card) && checkParity(card) } export function validateCovidAnswer(answer) { if (!answer.name) { return '请填写姓名!' } if (!isValidPhone(answer.phone)) { return '请填写正确的手机号!' } if (!answer.patientId) { if (!isValidIdcard(answer.idcard)) { return '请填写正确的身份证号!' } } if (!answer.temperature) { return '请选择体温选项!' } if (answer.temperature === '2' && !answer.feverNumber) { return '体温为发烧时请填写具体温度!' } if (answer.item5 === 51 && answer.symptoms.length < 1) { return '请选择症状!' } let count = 0 for (let key in answer) { if (key.indexOf('item') !== -1) { count++ } } if (count < 5) { return '有未选择的选项!' } answer.addrAdditional = '' return '' }