出生日期、年龄、身份证联动

<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="6">
  <el-form-item label="年龄" prop="patientAge">
    <el-input v-model="formdata.patientAge" placeholder="年龄">
      <el-select
        v-model="formdata.patientAgeUnit"
        slot="append"
        @change="ageChange"
        style="width: 60px;"
      >
        <el-option
          label="岁"
          value="Y"
        ></el-option>
        <el-option
          label="月"
          value="M"
        ></el-option>
        <el-option
          label="天"
          value="D"
        ></el-option>
      </el-select>
    </el-input>
  </el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="6">
  <el-form-item label="身份证" prop="idCard">
    <el-input v-model="formdata.idCard" placeholder="身份证" @change="idCardChange"></el-input>
  </el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="6">
  <el-form-item label="出生日期" prop="birthDate">
    <el-date-picker
      v-model="formdata.birthDate"
      type="date"
      placeholder="选择日期"
      style="width: 100%;"
    >
    </el-date-picker>
  </el-form-item>
</el-col>
'formdata': {
  patientName: '', // 姓名
  birthDate: '', // 出生日期
  gender: 1, // 性别 值域:0-未知的性别;1-男性;2-女;9-未说明的性别
  'address': '', // 联系地址
  'patientPhone': '', // 联系电话
  organizationCode: this.$store.state.user.hospitalCode, // 档案所属机构

  'visitNo': '', // 就诊号
  'visitNumber': 0,
  patientAge: '', // 年龄 21Y/8M/9D/10H
  patientAgeUnit: 'Y', // 21Y/8M/9D/10H
  patientSource: 1, // 值域:1-门诊;2-住院;3-体检;5-急诊
  'medicalCardNo': '', // 就诊卡号
  'medicalRecordNo': '', // 病历号
  'clinicCode': '', // 门诊号
  'hospizationCode': '', // 住院号
  visitDateTime: dateFormatter(new Date()), // 就诊时间
  'visitDeparmentCode': '', // 就诊科室代码
  'visitDeparment': '', // 就诊科室
  'attendDoctorCode': '', // 接诊医生代码
  'attendDoctor': '', // 就诊医生
  'diagnosis': '', // 诊断
  'icD10': '', // icd10
  'bedNo': '', // 床号
  'wardName': '', // 病区
  'wardNo': '', // 病区代码
  'roomNo': '', // 病房号
},
rules: {
  patientId: [{ required: true, message: '请输入患者ID', trigger: 'blur' }],
  patientName: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
  patientAge: [{ required: true, message: '请输入年龄', trigger: 'blur' }],
  birthDate: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
  idCard: [{ required: !!window.g.CHECK_QUERY_HR_SHOW, message: '请输入身份证', trigger: 'blur' }],
  patientSource: [{ required: true, message: '请选择病人类型', trigger: 'blur' }],
  gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
  visitDateTime: [{ required: true, message: '请选择就诊时间', trigger: 'blur' }],
  applyDepartment: [{ required: true, message: '请选择申请科室', trigger: 'change' }],
  applyDoctor: [{ required: true, message: '请选择申请医生', trigger: 'change' }],
  applyCode: [{ required: true, message: '请输入申请单号', trigger: 'blur' }]
},

// 根据输入身份证号,自动填写 性别、生日、年龄
idCardChange() {
  let id = this.formdata.idCard
  if (id && isIdCard(id)) {
    this.formdata.gender = sexById(id)
    this.formdata.birthDate = birthdayById(id)
    this.setAgeValApply(this.formdata.birthDate)
  }
},
getMonthDay(year, month) {
  let days = new Date(year, month + 1, 0).getDate()
  return days
},
// 根据出生日期计算年龄
getAgeApply(strAge) {
  var birArr = strAge.split('-')
  var birYear = birArr[0]
  var birMonth = birArr[1] * 1
  var birDay = birArr[2]

  var d = new Date()
  var nowYear = d.getFullYear()
  var nowMonth = d.getMonth() + 1 // 记得加1
  var nowDay = d.getDate()
  var returnAge; var errFlag = false; var errMsg = ''

  if (birArr == null) {
    return {
      errFlag: true,
      errMsg: '',
      val: ''
    }
  }
  var dBir = new Date(birYear, birMonth - 1, birDay)
  if (dBir.getFullYear() == birYear && (dBir.getMonth() + 1) == birMonth && dBir.getDate() == birDay) {
    if (nowYear == birYear) {
      // 同年
      // returnAge = 0; //同年
      var MonthDiff = nowMonth - birMonth // 计算月
      if (MonthDiff >= 0) {
        if (nowMonth == birMonth) {
          let dayDiff = nowDay - birDay // 计算日
          if (dayDiff >= 0) {
            returnAge = dayDiff + '#D'
          } else {
            errFlag = true
            errMsg = '出生日期晚于今天,数据有误'
          }
        } else if (nowMonth == birMonth + 1) {
          var preMonthDays = this.getMonthDay(birYear, birMonth)
          let dayDiff = nowDay + preMonthDays - birDay // 计算日
          if (dayDiff >= 0) {
            returnAge = dayDiff + '#D'
          } else {
            errFlag = true
            errMsg = '出生日期晚于今天,数据有误'
          }
        } else {
          returnAge = MonthDiff + 1 + '#M'
        }
      } else {
        errFlag = true
        errMsg = '出生日期晚于今天,数据有误'
      }
      return {
        errFlag: errFlag,
        errMsg: errMsg,
        val: returnAge
      }
    } else {
      // 不同年
      var ageDiff = nowYear - birYear // 计算年
      if (ageDiff > 0) {
        if (nowMonth == birMonth) {
          let dayDiff = nowDay - birDay // 计算日
          if (dayDiff < 0) {
            if (ageDiff != 1) {
              returnAge = (ageDiff - 1) + '#Y'
            } else {
              returnAge = 11 + '#M'
            }
          } else {
            returnAge = ageDiff + '#Y'
          }
        } else {
          var monthDiff = nowMonth - birMonth // 计算月
          if (monthDiff < 0) {
            // returnAge = ageDiff - 1;
            if (ageDiff != 1) {
              returnAge = (ageDiff - 1) + '#Y'
            } else {
              returnAge = Math.abs(nowMonth - birMonth + 12) + '#M'
            }
          } else {
            returnAge = ageDiff + '#Y'
          }
        }
      } else {
        errFlag = true
        errMsg = '出生日期晚于今天,数据有误'// 返回-1 表示出生日期输入错误 晚于今天
      }
      return {
        errFlag: errFlag,
        errMsg: errMsg,
        val: returnAge + '#Y'
      }
    }
  } else {
    return {
      errFlag: true,
      errMsg: '输入的日期格式错误!',
      val: ''
    }
  }
},
setAgeValApply(strAge) {
  var ageObj = this.getAgeApply(strAge)
  if (!ageObj.errFlag) {
    var ageArr = ageObj.val.split('#')
    this.formdata.patientAgeUnit = ageArr[1]
    this.formdata.patientAge = ageArr[0]
  } else if (ageObj.errMsg != '') {
    this.$alert(ageObj.errMsg, '提示', {
      confirmButtonText: '确定',
      type: 'warning',
      callback: action => {
        this.formdata.birthDate = ''
      }
    })
    return false
  }
},
// 监听年龄变化,计算生日
ageChange() {
  const bday = birthdayByAge(this.formdata.patientAge, this.formdata.patientAgeUnit)
  this.formdata.birthDate = bday
},
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值