挂号

页面展示

image.png

前台Register.vue

<template>
  <div>
  <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
   <!-- 第一行-->
   <el-row>
     <el-col :span="5">
    <el-form-item label="发票号" prop="invoiceNum" >
        <el-input v-model="ruleForm.invoiceNum" size="mini"></el-input>
    </el-form-item>
    </el-col>
     <el-col :span="5">
    <el-form-item>
        <el-button type="primary" @click="submitForm('ruleForm')">挂号</el-button>
        <el-button @click="resetForm('ruleForm')">清空</el-button>
      </el-form-item>
     </el-col>
   </el-row>


      <el-row>
        <el-col :span="2">
      <h2>挂号信息</h2>
      </el-col>
     </el-row>


<!-- 第3行-->
<hr>
<el-row>
  <el-col :span="5">
    <el-form-item label="病历号" prop="caseNumber">
    <el-input v-model="ruleForm.caseNumber" size="mini"></el-input>
    </el-form-item>
  </el-col>
  <el-col :span="5">
   <el-form-item label="姓名" prop="realName">
     <el-input v-model="ruleForm.realName" size="mini"></el-input>
   </el-form-item>

  </el-col>
  <el-col :span="5">
    <el-form-item label="身份证号" >
    <el-input v-model="ruleForm.iDnumber" size="mini" @change="getOther"></el-input>
    </el-form-item>



  </el-col>
  <el-col :span="5">
    <el-form-item label="出生日期"  >
    <el-date-picker type="date" placeholder="出生日期" v-model="ruleForm.birthDate" size="mini" format="yyyy-MM-dd" value-format="yyyy-MM-dd"></el-date-picker>
    </el-form-item>
  </el-col>
</el-row>


<!-- 第4行-->
 <el-row>
        <el-col :span="5">
          <el-form-item label="性别" prop="sex">
            <el-select v-model="ruleForm.sex" placeholder="请选择性别" size="mini">
              <el-option v-for="item in sexoptions" :key="item.id" :value="item.id" :label="item.constantName" ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="5">
          <el-form-item label="年龄">
            <el-input v-model="ruleForm.age" size="mini"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="5">
          <el-form-item label="岁别" prop="ageType">
            <el-select v-model="ruleForm.ageType" size="mini">
              <el-option v-for="item in ageTypeoptions" :key="item.key" :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>

        <el-col :span="6">
          <el-form-item label="家庭住址" prop="address" >
            <el-input v-model="ruleForm.address" size="mini"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
<!-- 下一行-->
<el-row>
        <el-col :span="5">
          <el-form-item label="结算类型" prop="settleID">
            <el-select v-model="ruleForm.settleID" placeholder="请选择结算类别" size="mini">
              <el-option v-for="item in settleIDTypeoptions" :key="item.id" :value="item.id" :label="item.constantName"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="3">
          <el-form-item label="看诊日期" prop="visitDate">
            <el-date-picker v-model="ruleForm.visitDate" type="date" placeholder="选择日期" size="mini" format="yyyy-MM-dd" value-format="yyyy-MM-dd">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="3">
          <el-form-item label="" prop="noon">
            <el-select v-model="ruleForm.noon" placeholder="请选择午别" size="mini">
              <el-option v-for="item in noonTypeoptions" :key="item.key" :value="item.value" ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="10">
          <el-form-item label="挂号科室" prop="deptID" style="float: right;width=50px">
            <el-select v-model="ruleForm.deptCataId" placeholder="请选择科室" size="mini"  @change="getDept">
              <el-option  key="0"  value="" label="请选择"></el-option>
              <el-option v-for="item in deptCataIdoptions" :key="item.id" :value="item.id" :label="item.constantName"></el-option>
            </el-select>

            <el-select v-model="ruleForm.deptID" placeholder="请选择科室" size="mini">
              <el-option v-for="item in deptIDTypeoptions" :key="item.id" :value="item.id" :label="item.deptName"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>

<!-- -->
<el-row>

        <el-col :span="5">
          <el-form-item label="号别" prop="registLeID">
            <el-select v-model="ruleForm.registLeID" placeholder="请选择号别" size="mini" @change="getDoc">
             <el-option  key="0"  value="" label="请选择"></el-option>
             <el-option v-for="item in registLeIDTypeoptions" :key="item.id" :value="item.id" :label="item.registName"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="5">
          <el-form-item label="看诊医生" prop="userId">
            <el-select v-model="ruleForm.userId" placeholder="请选择医生" size="mini" @change="getMaxNum">
              <el-option  key="0"  value="" label="请选择"></el-option>
              <el-option v-for="item in userIdTypeoptions" :key="item.id" :value="item.id" :label="item.realName"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="5">
          <el-form-item label="初始号额" prop="startRegistQuota">
            <el-input v-model="ruleForm.startRegistQuota" placeholder="初始号额" size="mini"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="5">
          <el-form-item label="已用号额" prop="usedRegistQuota" style="float: right;">
            <el-input v-model="ruleForm.usedRegistQuota" placeholder="已用号额" size="mini"></el-input>
          </el-form-item>
          </el-col>
          </el-row>
      <!-- -->
       <el-row>
             <el-col :span="5">
                <el-form-item label="病历本" prop="isBook" style="float: left;">
                     <el-radio-group v-model="ruleForm.isBook" @change="changeFee">
                         <el-radio  label="1">需要</el-radio>
                         <el-radio  label="0">不需要</el-radio>
                     </el-radio-group>
               </el-form-item>
             </el-col>
             <el-col :span="5">
               <el-form-item label="应收金额">
                 <el-input v-model="ruleForm.fee" placeholder="应收金额" size="mini"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="5">
               <el-form-item label="收费方式" prop="method">
                 <el-select v-model="ruleForm.method" placeholder="请选择收费方式" size="mini">
                   <el-option v-for="item in methodTypeoptions" :key="item.id" :value="item.id" :label="item.constantName"></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
           </el-row>





  </el-form>

  </div>
</template>

<script>







//5、选择看诊医生,计算出已用号额 判断是否可以挂号
//6、选择是否要病历本,计算出最终的应收金额
//@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
  export default{
    data(){
      return{
          ruleForm:{
            invoiceNum:'',//存到发票表里
            caseNumber:'',//病历号 挂号表里
            realName:'',//真实姓名 挂号表里
            iDnumber:'',//身份证号 挂号表里
            birthDate:'',
            sex:'',
            age:'',
            ageType:'',
            address:'',
            settleID:'',
            visitDate:'',
            noon:'',
            deptID:'',
            registLeID: '',
            userId: '',
            startRegistQuota: '',
            usedRegistQuota: '',
            isBook:'0',
            fee:'',
            method:'',
            deptCataId:''
          },
          sexoptions: [],
          ageTypeoptions: [{ key: 1,value: '岁'},{key: 2,value: '月'},{key: 3,value: '天'}],
           settleIDTypeoptions: [],
           methodTypeoptions:[],
           deptCataIdoptions:[],//科室一级分类,方便科室二级分类选择
           deptIDTypeoptions: [],
           noonTypeoptions: [{key:'1',value:'上午'},{key:'2',value:'下午'}],
           registLeIDTypeoptions:[],
           userIdTypeoptions:[],

           rules: {
             invoiceNum:[{ required: true, message: '请输入发票号', trigger: 'blur' },
            { min: 2, max: 64, message: '长度在 10 到 64 个字符', trigger: 'blur' }],
             caseNumber:[{ required: true, message: '请输入病历号', trigger: 'blur' },
            { min: 2, max: 64, message: '长度在 10 到 64 个字符', trigger: 'blur' }],
             realName:[{ required: true, message: '请输入真实姓名', trigger: 'blur' },
            { min: 2, max: 64, message: '长度在 10 到 64 个字符', trigger: 'blur' }]
           }

      }

    },
     methods: {

       //3、科室做一个下拉  1节课
       getDept(){
         //alert(this.ruleForm.deptCataId);
         let typeId=this.ruleForm.deptCataId;
         //选择一级科室,读取该科室下的二级科室
         this.$axios.get("http://localhost:8080/sys/dept/findByTypeId?typeId="+typeId)
         .then(res=>{
           this.deptIDTypeoptions=res.data;

         })

       },
       //选择号别,获取看诊医生
       getDoc(){
         //4.1选择号别后自动计算应收金额registFee、初始号额registQuota
         //alert("号别编号:"+this.ruleForm.registLeID);
         let levelid=this.ruleForm.registLeID;//获取用户选择的挂号级别的id
         let registLevels=this.registLeIDTypeoptions;//数组类型

         //循环页面缓存里的挂号级别数组
         for(let i=0;i<registLevels.length;i++){
           //用户选择的挂号级别id如果等于指定这条数据的id
           if(registLevels[i].id==levelid){
             //将选中的挂号级别信息的挂号费和初始号额填充到对应字段中
             //alert(registLevels[i].registFee);
             //alert(registLevels[i].registQuota);
             this.ruleForm.fee=registLevels[i].registFee;
             this.ruleForm.startRegistQuota=registLevels[i].registQuota;
           }
         }
         //4.2选择号别后(请求后台)根据日期 午别 科室 号别 查询出看诊医生
         // SELECT  u.*
         // FROM USER u,scheduling s
         // WHERE   u.id = s.userid
         // AND s.schedDate ='2021-01-12'
         // AND s.noon ='上午'
         // AND u.deptID =1
         // AND u.registLeID=1
         let visitDate=this.ruleForm.visitDate;
         let noon=this.ruleForm.noon;
         let deptid=this.ruleForm.deptID;
         //let levelid=this.ruleForm.registLeID;
         this.$axios.get("http://localhost:8080/user/findUserByParams?schedDate="+visitDate+"&noon="+noon+"&deptID="+deptid+"&registLeID="+levelid
         )
         .then(res=>{
           this.userIdTypeoptions=res.data;
         })

       },
          //选择医生 ,查询这个医生,当天指定午别下的已挂号数量
          getMaxNum(){
            //获取挂号限额
            let max=this.ruleForm.startRegistQuota;
            //调用后台进行查询  (汇总挂号信息表)
            this.$axios.post("http://localhost:8080/reg/countByParams",this.ruleForm)
            .then(res=>{
              let count=res.data;
              alert(count);
              if(count==max){
                //提示挂号数量达到限额,不能挂号
                this.$message('挂号数量已经达到限额');
              }else{

                //用这个数量更新已用号额
                this.ruleForm.usedRegistQuota=count;
              }
            })
          },
          //是否选择病历本
          changeFee(){
            //alert(this.ruleForm.isBook);
            if(this.ruleForm.isBook==1){
              this.ruleForm.fee+=5;
            }else{
              this.ruleForm.fee-=5;
            }
          },
          submitForm(formName) {
            this.$refs[formName].validate((valid) => {
              if (valid) {
                //alert('submit!');
                this.$axios.post("http://localhost:8080/reg/save",this.ruleForm)
                .then(res=>{

                })
              } else {
                console.log('error submit!!');
                return false;
              }
            });
          },
          resetForm(formName) {
            this.$refs[formName].resetFields();
          },
          datedifference(sDate1, sDate2) { //sDate1和sDate2是2006-12-18格式
                    var dateSpan,tempDate,iDays;
                    sDate1 = Date.parse(sDate1);
                    sDate2 = Date.parse(sDate2);
                    dateSpan = sDate2 - sDate1;
                    dateSpan = Math.abs(dateSpan);
                    iDays = Math.floor(dateSpan / (24 * 3600 * 1000));
                    return iDays
                  },
                  getOther(){
                    //alert(this.ruleForm.iDnumber);
                    //1、输入身份证号:联想出出生日期,年令 岁别
                    //出生日期yyyy-mm-dd
                    //alert(this.ruleForm.birthDate);
                    //210111197909290643
                    let idnumber=this.ruleForm.iDnumber;
                    let year=idnumber.substring(6,10);
                    let month=idnumber.substring(10,12);
                    let day=idnumber.substring(12,14);
                    let birthday_str=year+"-"+month+"-"+day;
                    //alert(birthday_str);
                    this.ruleForm.birthDate=birthday_str;
                    //思路是计算当前日期和出生日期之间相差的天数
                    //当前日期的一个yyyy-MM-dd形式
                    let now=new Date();
                    let curdate_str=now.getFullYear()+"-"+(now.getMonth()+1)+"-"+now.getDate();
                    //计算当前日期和出生日期相差的天数
                    let days=this.datedifference(curdate_str,birthday_str);
                    //alert(days);
                    //1、判断这个数是否大于365
                    if(days>365){//如果大于365 岁别:岁  days/365
                      this.ruleForm.ageType="岁";
                      this.ruleForm.age=Math.floor(days/365);
                    }else{
                      //2、如果小于365,判断是否大于30天
                      if(days>30){//如果大于30天,岁别:月  days/30
                        this.ruleForm.ageType="月";
                        this.ruleForm.age=Math.floor(days/30);
                      }else{
                        //如果小于30,岁别:天  days
                        this.ruleForm.ageType="天";
                        this.ruleForm.age=days;
                      }
                    }
                  
                  
    //性别 身份证号码倒数第二位为性别 偶数为女 奇数为男
    let sexn = idnumber.substring(16, 17);
    if (sexn % 2 == 0) {
      this.ruleForm.gender = '女'
    } else {
      this.ruleForm.gender = '男'
    }



                  }
        },
        mounted() {
          //2、性别 结算类型  收费方式 科室一级分类(内科外科)做一个统一接口(常数项分类表) 一节课
          //http://localhost:8080/sys/constantItem/findByTypeName?typeName=%E6%80%A7%E5%88%AB%E7%B1%BB%E5%9E%8B
          //[{"id":71,"constantTypeID":7,"constantCode":"NAN","constantName":"男","delMark":1},{"id":72,"constantTypeID":7,"constantCode":"NV","constantName":"女","delMark":1}]
          this.$axios.get("http://localhost:8080/sys/constantItem/findByTypeName?typeName=性别类型")
          .then(res=>{
            this.sexoptions=res.data;
          })
          this.$axios.get("http://localhost:8080/sys/constantItem/findByTypeName?typeName=结算类型")
          .then(res=>{
            this.settleIDTypeoptions=res.data;
          })

          this.$axios.get("http://localhost:8080/sys/constantItem/findByTypeName?typeName=收费方式")
          .then(res=>{
            this.methodTypeoptions=res.data;
          })
          //科室一级分类deptCataIdoptions
this.$axios.get("http://localhost:8080/sys/constantItem/findByTypeName?typeName=科室分类")
          .then(res=>{
            this.deptCataIdoptions=res.data;
          })


        //registLeIDTypeoptions
          //4、号别下拉
 this.$axios.get("http://localhost:8080/sys/registlevel/findAll")
           .then(res=>{
             this.registLeIDTypeoptions=res.data;
           })




}

  }
</script>

<style>
</style>

后台关键代码

  • 存储后立刻拿到id
    public interface RegisterMapper {
        @Select(" select count(1) "+
                " from register "+
                " where visitState<>4 "+
                " and userId=#{userId} "+
                " and visitDate=#{visitDate} "+
                " and noon=#{noon}")
        int countByParams(Map<String, Object> map);
        @Insert("insert into register values(null,#{caseNumber},#{realName},#{gender},#{iDnumber},#{birthDate},#{age},#{ageType},#{homeAddress},#{visitDate},#{noon},#{deptID},#{userID},#{registLeID},#{settleID},#{isBook},#{registTime},#{registerID},#{visitState})")
        @Options(useGeneratedKeys=true,keyProperty="id",keyColumn="id")
        int save(Register reg);

    }
  • 事务(待完成)

step 1 主启动类加@EnableTransactionManagement
step 2service实现类加@Transactional(rollbackFor={RuntimeException.class,Exception.class})

step 3改造service方法,捕获异常时抛出

                  @Override
        public ResponseBean save(Map<String, Object> map) throws Exception {
            ResponseBean res=null;
            try {
                
            
            //跟挂号信息相关的存储到挂号信息表
            Register reg=new Register();
            reg.setAge((Integer) map.get("age"));
            reg.setAgeType( (String) map.get("ageType"));
            reg.setBirthDate((String) map.get("birthDate"));
            reg.setCaseNumber((String) map.get("caseNumber"));
            reg.setDeptID((Integer) map.get("deptID"));
            reg.setGender((Integer) map.get("sex"));
            reg.setHomeAddress((String) map.get("address"));
            reg.setiDnumber((String) map.get("iDnumber"));
            reg.setIsBook((String) map.get("isBook"));
            reg.setNoon((String) map.get("noon"));
            reg.setRealName((String) map.get("realName"));
            //reg.setRegisterID(registerID);
            reg.setRegistLeID((Integer) map.get("registLeID"));
            reg.setRegistTime(new Date());
            reg.setSettleID((Integer) map.get("settleID"));
            reg.setUserID((Integer) map.get("userId"));
            reg.setVisitDate(new Date());
            int i=mapper.save(reg);
            int regist_id=reg.getId();
            System.out.println(regist_id);
            //int j=0;
            //double k=1/j;
            //跟发票相关的存到收据表
            //跟费用明细相关的存储到费用明细表
            } catch (Exception e) {
                throw new Exception(e.getMessage());
            }
            return res;
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容