Prechádzať zdrojové kódy

合并dev
Squashed commit of the following:

commit 6c1978b3cf95d01b6979fc8d2e558db73ea6699c
Merge: 2817f6f 29702b2
Author: Luolei <16657115156@163.com>
Date: Sat Jul 6 13:51:22 2019 +0800

Merge branch 'development' into dev

commit 2817f6fe89bbc72b5b85f996b054ae959a6d715c
Author: Luolei <16657115156@163.com>
Date: Sat Jul 6 13:26:30 2019 +0800

改回配置

commit 99fd5c92c83ff78da644fceb2e73d9646d63eaad
Author: Luolei <16657115156@163.com>
Date: Fri Jul 5 17:10:57 2019 +0800

多列填写,预览

commit 54aa3aad2d6163449bff54abd5fbee53f8010941
Merge: 9b50ae5 ea78834
Author: Luolei <16657115156@163.com>
Date: Wed Jul 3 20:22:00 2019 +0800

Merge remote-tracking branch 'remotes/origin/development' into dev

commit 9b50ae5cf4fb61577133d0ff0f0470f86c3da87d
Author: Luolei <16657115156@163.com>
Date: Wed Jul 3 19:43:27 2019 +0800

新增文本域组件

commit c49d6a90ceb0a9f4166b1bb787c8b36171d6db41
Author: Luolei <16657115156@163.com>
Date: Wed Jul 3 09:56:18 2019 +0800

添加补充内容页面

commit db3d558cc2e8292c65bb8e460a206c40b44e4f75
Author: liucf <liucf@zjlantone.com>
Date: Tue Jul 2 11:38:56 2019 +0800

Squashed commit of the following:

commit abb05f77689576a0834513d2a21f5f05b321e495
Author: liucf <liucf@zjlantone.com>
Date: Tue Jul 2 11:36:51 2019 +0800

增加图片

commit 1a3e1b96d9dfd09cf7c9b5d05001db5a12cc2ac4
Author: liucf <liucf@zjlantone.com>
Date: Mon Jul 1 20:44:08 2019 +0800

新增弹窗,单选,多选,待完善

commit 565f06729383a7df1bfde511faacb5979432a7da
Author: liucf <liucf@zjlantone.com>
Date: Fri Jun 28 17:36:42 2019 +0800

患者信息页完成

liucf 6 rokov pred
rodič
commit
379f8dd0ad

+ 7 - 4
src/common/ComTextArea.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="comArea">
-    <textarea @input="changeVal" :style={width:width,height:height} v-model="txt"></textarea>
+    <textarea @input="changeVal" :style={width:width,height:height} v-model="txt" placeholder="请输入"></textarea>
   </div>
 </template>
 
@@ -24,7 +24,7 @@ export default {
   },
   methods:{
     changeVal(){
-      this.$emit('changeVal',this.txt)
+      this.$emit('changeAreaVal',this.txt)
     }
   }
 }
@@ -32,11 +32,14 @@ export default {
 <style lang="less" scoped>
   .comArea {
     textarea {
+      resize: none;
+      box-shadow: none;
+      font-size: 0.3rem;
+      box-sizing: border-box;
       border: 1px solid #DFE0E4;
       border-radius: .08rem /* 8/100 */;
+      -webkit-appearance: none;
       padding: .16rem /* 16/100 */ .3rem /* 30/100 */;
-      resize: none;
-      box-sizing: border-box;
     }
   }
 </style>

+ 66 - 0
src/common/MultiLineInput.vue

@@ -0,0 +1,66 @@
+<template>
+  <div class="multipIpt">
+    <span class="prefix" v-if="content.prefix">{{content.prefix}}</span>
+    <p class="sticP">
+      <input class="contentVal" :type="content.type" :placeholder="content.placeholder" v-model="val" @input="changeVal">
+    </p>
+    <span class="suffix" v-if="content.suffix">{{content.suffix}}</span>
+  </div>
+</template>
+<script>
+import { getModelExpStr } from '@utils/tools';
+
+export default {
+  props:{
+    msg:{
+      default:'',
+      type:String
+    }
+  },
+  data(){
+    return {
+      content:{},
+      val:''
+    }
+  },
+  mounted(){
+    this.content = getModelExpStr(this.msg)
+  },
+  methods:{
+    changeVal(){
+      this.$emit('changeMultipVal',this.val)
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+  .multipIpt {
+    width: 100%;
+    height: .74rem /* 74/100 */;
+    line-height: .74rem /* 74/100 */;
+    border: 1px solid #DFE0E4;
+    border-radius: .08rem /* 8/100 */;
+    padding: 0 .26rem;
+    box-sizing: border-box;
+    position: relative;
+    margin: .3rem 0;
+    .contentVal {
+      font-size: .3rem /* 30/100 */;
+      color: #4F50FF;
+      text-align: left;
+      border: 0 none;
+      border-bottom: 1px solid #b0afaf !important;
+      border-radius: 0;
+      background-color: #fff;
+      padding: 0 .1rem;
+      outline-color: invert ;
+    }
+  }
+  .prefix {
+    float: left;
+  }
+  .suffix {
+    position: absolute;
+    right: .12rem /* 12/100 */;
+  }
+</style>

+ 47 - 71
src/components/AddContent.vue

@@ -4,40 +4,68 @@
       <ul class="addPart">
         <li v-for="(item,idx) in dataTrd">
           <p class="question">{{idx+1 + '. ' +item.name}}</p>
-          <ComTextArea @changeVal="changeVal($event,idx)"></ComTextArea>
+          <ComTextArea
+            v-if="item.controlType == 6"
+            @changeAreaVal="changeAreaVal($event,idx)"
+          ></ComTextArea>
+          <template
+            v-if="item.controlType == 3"
+            v-for="(part,index) in item.questionDetailList"
+          >
+            <MultiLineInput
+              v-if="item.controlType == 3"
+              @changeMultipVal="changeMultipVal($event,idx)"
+              :msg="part.name"
+            ></MultiLineInput>
+          </template>
         </li>
       </ul>
+      <div class="thanks">
+        <p>感谢您的回答,您的病历已经自动生成。</p>
+        <p>您可以点击预览病历回顾病情;或者点击顶部修改病历采集信息。</p>
+        <p>如果没有需要修改的内容,请点击提交,医生便能看到您的病历。</p>
+      </div>
+    </div>
+    <div class="foot">
+      <span class="back" @click="back">{{'返回'+ preName}}</span>
+      <span class="next" @click="next">预览</span>
     </div>
-    <div
-      class="footer"
-      @click="back"
-    >上一步</div>
   </div>
 </template>
 <script type="text/javascript">
 import ComTextArea from '../common/ComTextArea.vue';
+import MultiLineInput from '../common/MultiLineInput.vue';
 
 export default {
   name: 'AddContent',
-  props: ['allMoudles'],
+  props: ['allMoudles','preName'],
   data() {
     return {
-      dataTrd: []
+      dataTrd: [],
+      val: ''
     }
   },
   mounted() {
-    this.dataTrd = this.allMoudles&&this.allMoudles.moduleDetailDTOList
+    this.dataTrd = this.allMoudles && this.allMoudles.moduleDetailDTOList
   },
   methods: {
     back() {
       this.$emit("back");
     },
-    changeVal(value,idx){
+    changeAreaVal(value, idx) {
       // console.log(value,idx)
+      this.val = value
+    },
+    changeMultipVal(value, idx) {
+      console.log(value, idx)
+    },
+    next(){
+      this.$emit('next','preview')
     }
   },
   components: {
     ComTextArea,
+    MultiLineInput,
   }
 }
 </script>
@@ -54,74 +82,22 @@ export default {
   padding-bottom: 0.2rem;
   .addPart {
     li {
-      margin-bottom: .5rem /* 50/100 */;
+      margin-bottom: 0.5rem /* 50/100 */;
     }
     .question {
-      margin-bottom: .3rem /* 30/100 */;
+      margin-bottom: 0.3rem /* 30/100 */;
       font-weight: bold;
     }
   }
-  .choo-symp {
-    display: inline-block;
-    width: 1.9rem;
-    height: 0.74rem;
-    background: linear-gradient(-270deg, #4f4fff, #4f8bff);
-    box-shadow: 0 0.08rem 0.16rem 0 rgba(79, 129, 255, 0.4);
-    border-radius: 0.08rem;
-    white-space: nowrap;
-    margin: 0 0.3rem 0.3rem 0;
-    span {
-      display: inline-block;
-      vertical-align: top;
-    }
-    span:first-child {
-      width: 1.34rem;
-      height: 0.74rem;
-      line-height: 0.74rem;
-      text-align: center;
-      color: #fff;
-    }
-    img {
-      width: 0.56rem;
-      height: 0.74rem;
-    }
-  }
 }
-.label {
-  padding-bottom: 0.2rem;
-  .symp {
-    display: inline-block;
-    width: 1.9rem;
-    height: 0.74rem;
-    line-height: 0.74rem;
-    border: 1px solid #dfe0e4;
-    border-radius: 0.08rem;
-    text-align: center;
-    color: #7c828e;
-    margin: 0 0 0.3rem 0.3rem;
-    box-sizing: border-box;
-  }
-  .symp:nth-child(3n + 2) {
-    margin-left: 0;
-  }
-}
-.result {
-  h4 {
-    color: #4f50ff;
-    padding-left: 0.1rem;
-    border-left: 0.08rem solid #4f50ff;
-    margin-bottom: 0.19rem;
+  .foot{
+    .dbfooter;
   }
-  p {
-    color: #666;
-    line-height: 0.44rem;
-  }
-}
-.footer {
-  .footer;
-}
-.detail {
-  .mask;
-  z-index: 66;
+.thanks {
+  font-size: .28rem /* 28/100 */;
+  color: #666666;
+  letter-spacing: 0;
+  text-align: justify;
+  line-height: .48rem /* 48/100 */;
 }
 </style>

+ 95 - 0
src/components/Preview.vue

@@ -0,0 +1,95 @@
+<template>
+  <div class="preview">
+    <div class="personMsg">
+      <p class="baseMsg">{{pathInfo.patientName}}&nbsp;&nbsp;&nbsp;&nbsp;{{pathInfo.patientSex}}&nbsp;&nbsp;&nbsp;&nbsp;{{pathInfo.patientAge}}岁</p>
+      <table>
+        <tr>
+          <td class="fst">挂号科室:{{pathInfo.selfDeptName}}</td>
+          <td class="sec">门诊号:{{pathInfo.recordId}}</td>
+        </tr>
+        <tr>
+          <td class="fst">预约医生:{{pathInfo.doctorName}}</td>
+          <td class="sec">就诊时间:{{pathInfo.systemTime}}</td>
+        </tr>
+      </table>
+      <div class="line"></div>
+      <p>采集时间:{{pathInfo.systemTime}}</p>
+    </div>
+    <div class="personMsg">
+      主诉
+    </div>
+    <div class="foot">
+      <span class="back" @click="back">{{'返回'+ preName}}</span>
+      <span class="next">提 交</span>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  props:['preName'],
+  data(){
+    const {pathInfo,originDatas} = this.$store.state;
+    return {
+      msg:'预览',
+      pathInfo:pathInfo,
+    }
+  },
+  methods:{
+    back(){
+      this.$emit('back','preview')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+  @import "../less/base.less";
+  .foot{
+    .dbfooter;
+  }
+  .preview {
+    color: red;
+    background-color: #F2F2F5;
+    position: fixed;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    box-sizing: border-box;
+    padding: .3rem /* 30/100 */ .4rem /* 40/100 */;
+  }
+  .personMsg {
+    padding: .3rem /* 30/100 */ .4rem /* 40/100 */;
+    box-sizing: border-box;
+    background-color: #fff;
+    border-radius: .16rem /* 16/100 */;
+    margin-bottom: .38rem /* 38/100 */;
+    .baseMsg {
+      font-size: .32rem /* 32/100 */;
+      color: #000000;
+      letter-spacing: 0;
+      text-align: justify;
+      font-weight: bold;
+      margin-bottom: .13rem;
+    }
+    table {
+      width: 100%;
+      font-size: .26rem;
+      color: #333333;
+      letter-spacing: 0;
+      text-align: justify;
+      line-height: .44rem /* 44/100 */;
+      td.fst {
+        width: 40%;
+      }
+      td.sec {
+        width: 60%;
+      }
+    }
+    .line {
+      opacity: 0.3;
+      background: #D8D8D8;
+      margin: .2rem 0;
+      height: 1px;
+    }
+  }
+</style>

+ 137 - 99
src/components/TabPage.vue

@@ -1,125 +1,163 @@
 <template>
   <div class="tab-wrap">
-    <div class="tab" v-if="modlues&&modlues.length>0">
-      <p v-for="(it,index) in modlues" :key="it.id">
+    <div
+      class="tab"
+      v-if="modlues&&modlues.length>0 && moduleShow"
+    >
+      <p
+        v-for="(it,index) in modlues"
+        :key="it.id"
+      >
         <!-- <span :class="{current:index==0}" v-if="type[it.type]==1"> -->
-        <span :class="{current:index==parseInt(flag)-1}" v-if="type[it.type]==1">
+        <span
+          :class="{current:index==parseInt(flag)-1}"
+          v-if="type[it.type]==1"
+        >
           <i>{{it.type}}</i>
           {{it.name}}
         </span>
-      </p> 
+      </p>
     </div>
     <!-- 内容 -->
     <div class="content">
-      <Symptom v-if="flag==1" @next="toNext"/>
-      <DiagTreat v-if="flag==2" 
-            :datas="modlues[1]"
-            :preName="modlues[0]&&modlues[0].name"
-            :nextName="modlues[2]&&modlues[2].name"
-            @next="toNext"
-            @back="beBack"
-            />
-      <Others v-if="flag==3" 
-            :datas="modlues[2]"
-            :preName="modlues[1]&&modlues[1].name"
-            :nextName="modlues[3]&&modlues[3].name"
-            @next="toNext"
-            @back="beBack"
-            />
-      <AddContent v-show="flag == 4" 
-        :allMoudles="modlues[3]" 
+      <Symptom
+        v-if="flag==1&&moduleShow"
+        @next="toNext"
+      />
+      <DiagTreat
+        v-if="flag==2&&moduleShow"
+        :datas="modlues[1]"
+        :preName="modlues[0]&&modlues[0].name"
+        :nextName="modlues[2]&&modlues[2].name"
+        @next="toNext"
         @back="beBack"
-         />
+      />
+      <Others
+        v-if="flag==3&&moduleShow"
+        :datas="modlues[2]"
+        :preName="modlues[1]&&modlues[1].name"
+        :nextName="modlues[3]&&modlues[3].name"
+        @next="toNext"
+        @back="beBack"
+      />
+      <AddContent
+        v-show="flag == 4&&moduleShow"
+        :allMoudles="modlues[3]"
+        :preName="modlues[2]&&modlues[2].name"
+        @toggleModule="toggleModule"
+        @next="toNext"
+        @back="beBack"
+      />
+      <Preview v-show="!moduleShow" 
+        :preName="modlues[3]&&modlues[3].name"
+        @back="beBack" 
+      />
     </div>
   </div>
 </template>
 <script type="text/javascript">
-  import Symptom from './Symptom.vue';
-  import AddContent from './AddContent.vue';
-  import DiagTreat from './DiagTreat.vue';
-  import Others from './Others.vue';
-  export default {
-    name:'TabPage',
-    data(){
-      let sysConfig = this.$store.state.sysConfig;
-      let allMoudles = this.$store.state.allMoudles;
-      return{
-        config:sysConfig,
-        modlues:allMoudles,
-        type:{
-          "1":sysConfig.length>0&&sysConfig.filter(item=>item.code=="symptoms_show")[0].value,
-          "2":sysConfig.length>0&&sysConfig.filter(item=>item.code=="diagnosis_show")[0].value,
-          "3":sysConfig.length>0&&sysConfig.filter(item=>item.code=="omhistory_show")[0].value,
-          "4":sysConfig.length>0&&sysConfig.filter(item=>item.code=="replenish_show")[0].value,
-        },
-        flag:allMoudles.length>0&&allMoudles[0].type
+import Symptom from './Symptom.vue';
+import AddContent from './AddContent.vue';
+import DiagTreat from './DiagTreat.vue';
+import Others from './Others.vue';
+import Preview from './Preview.vue';
+export default {
+  name: 'TabPage',
+  data() {
+    let sysConfig = this.$store.state.sysConfig;
+    let allMoudles = this.$store.state.allMoudles;
+    return {
+      config: sysConfig,
+      modlues: allMoudles,
+      type: {
+        "1": sysConfig.length > 0 && sysConfig.filter(item => item.code == "symptoms_show")[0].value,
+        "2": sysConfig.length > 0 && sysConfig.filter(item => item.code == "diagnosis_show")[0].value,
+        "3": sysConfig.length > 0 && sysConfig.filter(item => item.code == "omhistory_show")[0].value,
+        "4": sysConfig.length > 0 && sysConfig.filter(item => item.code == "replenish_show")[0].value,
+      },
+      flag: allMoudles.length > 0 && allMoudles[0].type,
+      moduleShow:true
+    }
+  },
+  created() {
+    // console.log('配置信息:',this.config,'type',this.type)
+    if (this.config.length == 0) {
+      this.$router.go(-1)
+    }
+  },
+  methods: {
+    toNext(preview) {
+      console.log(preview)
+      if(preview === 'preview'){
+        this.moduleShow=false
+        return
       }
-    },
-    created(){
-      // console.log('配置信息:',this.config,'type',this.type)
-      if(this.config.length == 0){
-        this.$router.go(-1)
+      let flag = parseInt(this.flag);
+      if (this.modlues[flag]) {
+        this.flag = this.modlues[flag].type;
+        // this.flag = 4;
       }
     },
-    components:{
-      Symptom,
-      DiagTreat,
-      Others,
-      AddContent
-    },
-    methods:{
-      toNext(){
-        let flag = parseInt(this.flag);
-        if(this.modlues[flag]){
-          this.flag = this.modlues[flag].type;
-        } 
-      },
-      beBack(){
-        let flag = parseInt(this.flag)-1;
-        if(this.modlues[flag-1]){
-          this.flag = this.modlues[flag-1].type;
-        }
+    beBack(preview) {
+      if(preview === 'preview'){
+        this.moduleShow=true
+        return
+      }
+      let flag = parseInt(this.flag) - 1;
+      if (this.modlues[flag - 1]) {
+        this.flag = this.modlues[flag - 1].type;
       }
+    },
+    toggleModule(flg){
+      this.moduleShow = flg
     }
+  },
+  components: {
+    Symptom,
+    DiagTreat,
+    Others,
+    AddContent,
+    Preview
   }
+}
 </script>
 <style lang="less" scoped>
-  .tab-wrap{
-    width: 100%;
-    height: 100%;
-    padding-bottom: .88rem;
-    .tab{
-      height: .82rem;
-      line-height: .82rem;
-      border-bottom: 1px solid #EDEDED;
-      box-sizing: border-box;
-      padding-top: .16rem;
-      p{
-        display: inline-block;
-      }
-      span{
-        font-size: .24rem;
-        display: inline-block;
-        vertical-align: top;
-        width:1.48rem;
-        height: .5rem;
-        line-height: .5rem;
-        color: #7C828E;
-        text-align: center;
-        margin-left: .2rem;
-        margin-right: .19rem;
-      }
-      .current{
-        color: #0043E8;
-        background: #E5ECFC;
-        border-radius: 25px;
-      }
+.tab-wrap {
+  width: 100%;
+  height: 100%;
+  padding-bottom: 0.88rem;
+  .tab {
+    height: 0.82rem;
+    line-height: 0.82rem;
+    border-bottom: 1px solid #ededed;
+    box-sizing: border-box;
+    padding-top: 0.16rem;
+    p {
+      display: inline-block;
     }
-    .content{
-      font-size: .3rem;
-      padding: .45rem .6rem;
+    span {
+      font-size: 0.24rem;
+      display: inline-block;
+      vertical-align: top;
+      width: 1.48rem;
+      height: 0.5rem;
+      line-height: 0.5rem;
+      color: #7c828e;
+      text-align: center;
+      margin-left: 0.2rem;
+      margin-right: 0.19rem;
     }
-    /* .footer{
+    .current {
+      color: #0043e8;
+      background: #e5ecfc;
+      border-radius: 25px;
+    }
+  }
+  .content {
+    font-size: 0.3rem;
+    padding: 0.45rem 0.6rem;
+  }
+  /* .footer{
       width:100%;
       height: .88rem;
       line-height: .88rem;
@@ -132,5 +170,5 @@
       bottom: 0;
       left: 0;
     } */
-  }
+}
 </style>

+ 1 - 1
src/router.js

@@ -14,7 +14,7 @@ const router = new Router({
       path:'/tab',
       name:'TabPage',
       component:TabPage
-    },
+    }
   ]
 })
 

+ 19 - 2
src/utils/tools.js

@@ -6,7 +6,7 @@ const getUrlArgObject = (parm) => {
     let query = window.location.search;
     let args = qs.parse(query.substr(1));
     return args[parm];//返回对象  
-} 
+}
 
 const deepClone = (arr) =>{
   let newArr = [];
@@ -16,8 +16,25 @@ const deepClone = (arr) =>{
   return newArr;
 }
 
+const getModelExpStr = (str) =>{
+  let matchStr = str.match(/\${number_(.*})/)[0]
+  let result = {}
+  if(matchStr){//数字输入框
+    result = {
+      type:'number',
+      placeholder:matchStr.split('${number_')[1].split('}')[0],
+      prefix:str.split(matchStr)[0]||'',
+      suffix:str.split(matchStr)[1]||''
+    }
+  }else if(str.match(/\${input_(.*})/)){
+
+  }
+  return result
+}
+
 module.exports =  {
   imageUrlPrefix,
   getUrlArgObject,
-  deepClone
+  deepClone,
+  getModelExpStr
 }