瀏覽代碼

Merge branch 'dev' into byll

# Conflicts:
#	build/webpack.dev.conf.js
#	src/store.js
Luolei1992 5 年之前
父節點
當前提交
5924cb1cfc

文件差異過大導致無法顯示
+ 9982 - 5546
package-lock.json


+ 2 - 1
package.json

@@ -14,12 +14,13 @@
     "babel-polyfill": "^6.26.0",
     "better-scroll": "^1.13.2",
     "fastclick": "^1.0.6",
+    "jquery": "^3.4.1",
     "less": "^3.8.1",
     "less-loader": "^4.1.0",
     "lib-flexible": "^0.3.2",
     "vue": "^2.5.2",
-    "vue-router": "^3.0.1",
     "vue-photo-preview": "^1.1.3",
+    "vue-router": "^3.0.1",
     "vuex": "^3.1.1"
   },
   "devDependencies": {

+ 26 - 5
src/common/CheckBox.vue

@@ -13,7 +13,12 @@
           :inline="true" 
           :select="it.select==1" 
           /> -->
-      <OptionInp v-else :item="it" @handleInp="inpVal($event,index)" />
+      <OptionInp v-else 
+          :item="it" 
+          ref="inp"
+          @handleInp="inpVal($event,index)" 
+          :exclu="exclusion !==999 && it.exclusion !== exclusion" 
+          />
     </p>
   </div>
 </template>
@@ -42,6 +47,7 @@ import OptionInp from '../common/OptionInp.vue';
     },
     methods:{
       handleClick(it,index){
+        const that = this;
         const list = this.datas;
         let data = list.questionDetailList&&list.questionDetailList.slice(0);
         // 处理互斥
@@ -74,18 +80,33 @@ import OptionInp from '../common/OptionInp.vue';
         let value = "";
         for(let k in data){
           if(data[k].select==1){
-            value += data[k].name + ','
+            // 选中该项时,带的输入框内有值则加上
+            if(data[k].value){
+              let newVal = '#{' + data[k].value + '}';
+              let str = data[k].name.replace(patt,newVal);
+              value += str + ','
+            }else{
+              value += data[k].name + ','
+            }
+            
           }
         }
-        const newData = Object.assign({},this.datas,{questionDetailList:data},{value:value?value.substring(0,value.length-1):''})
+        const newData = Object.assign({},this.datas,{questionDetailList:data},{value:value?value.substring(0,value.length-1):''});
         this.$emit("updata",newData);
       },
       inpVal(val,index){//输入框失焦处理
         let valueStr = this.datas.value;
         if(valueStr){
           // let patt = /\$\{[^\]]+\}/g;
-          let newVal =  val;
-          const str = valueStr.replace(patt,newVal);
+          let rePatt = /\#\{[^\]]+\}/g;
+          let newVal = '#{' +val+'}';
+          let str = "";
+          // 区分第一次输入还是修改
+          if(valueStr.indexOf("${") !== -1){
+            str = valueStr.replace(patt,newVal);
+          }else{//修改
+            str = valueStr.replace(rePatt,newVal);
+          }
           this.datas.value = str;
         }
         

+ 1 - 1
src/common/Input.vue

@@ -61,4 +61,4 @@
       border-color:  #4F50FF;
     }
   }
-</style>
+</style>

+ 35 - 25
src/common/Label.vue

@@ -1,9 +1,10 @@
 <template>
   <div class="label-wrap" v-if="item">
-    <span v-for="(it,index) in datas.questionMapping" :key="it.id" :class="['symp',{'check':it.select==1},{'exclu':exclusion !==999 && it.exclusionType !== exclusion}]" @click="handleClick(it,index)">
-      <i>{{it.name}}</i>
-      <i v-if="it.select==1" @click="deletSymp($event,it,index)"><img src="../images/delete.png" alt=""></i>
-    </span>
+    <p v-for="(it,index) in datas.questionMapping" :key="it.id" :class="['symp',{'check':it.select==1},{'exclu':exclusion !==999 && it.exclusionType !== exclusion}]" @click="handleClick(it,index)">
+      <span>{{it.name}}</span>
+      <!-- <span v-if="it.select==1" @click="deletSymp($event,it,index)"><img src="../images/delete.png" alt=""></span> -->
+      <span v-if="it.select==1" @click="deletSymp($event,it,index)"><img src="../images/del.png" alt=""></span>
+    </p>
     <Toast :message="delText" 
           :show="showToast"
           @comfirn="comfirnDel" 
@@ -124,37 +125,46 @@ import {moduleCP} from '@utils/tools';
 <style lang="less" scoped>
   .label-wrap{
     font-size: .3rem;
-    .symp{
-      position: relative;
-    }
-    img{
-      width:.56rem;
-      height: .70rem;
-      vertical-align: top;
-      z-index: 22;
-      position: absolute;
-      top:0;
-      right: 0;
-    }
-    i{
+     .symp{
+      // position: relative;
       display: inline-block;
-      vertical-align: top;
-    }
-    i:first-child{
-      min-width:1.34rem;
+      min-width:1.9rem;
       height: .72rem;
-      line-height: .72rem;
-      text-align: center;
+      span{
+        display: inline-block;
+        vertical-align: top;
+      }
+      span:first-child{
+        // min-width:1.34rem;
+        min-width:1.42rem;
+        height: .72rem;
+        line-height: .72rem;
+        text-align: center;
+      }
+      img{
+        // width:.56rem;
+        width:.48rem;
+        height: .70rem;
+        vertical-align: top;
+        z-index: 22;
+        // position: absolute;
+        // top:0;
+        // right: 0;
+      }
+    }
+    .symp:last-child{
+      margin-right: 0;
     }
     .check{
       color: #fff;
       // background: linear-gradient(-270deg, #4F4FFF, #4F8BFF);
       background: linear-gradient(-270deg, #3638EE, #4E72FF);
       box-shadow: 0 .08rem .16rem 0 rgba(79,129,255,0.40);
-      padding-right: 0.57rem;
+      // padding-right: 0.57rem;
     }
     .exclu{
-      background:#f0f1f5;
+      // background:#f0f1f5;
+      background:#E3E4E8;
     }
   }
   

+ 19 - 7
src/common/OptionInp.vue

@@ -1,11 +1,14 @@
 <!-- 带输入框选项 -->
 <template>
-  <div :class="['inpbox',{'check':item.select}]">
+  <div :class="['inpbox',{'check':item.select},{'exclu':exclu}]">
     <span class="prefix" v-if="msg.prefix">{{msg.prefix}}</span>
     <div class="inp" @click="preClick">
       <input :type="msg.type=='number'?'tel':'text'" 
               :placeholder="msg.placeholder"
+              :disabled="select!=1"
+              :class="{'exclu':exclu}"
               v-model="txt"
+              @click="handleCli"
               @blur="handleBlur"
               @input="changeVal">
     </div>
@@ -13,18 +16,20 @@
   </div>
 </template>
 <script type="text/javascript">
-import { getExpStr } from '@utils/tools';
+import { getExpStr,scrollToV} from '@utils/tools';
   export default {
     name:'OptionInp',
     data(){
       return{
         msg:{},
-        txt:this.item.value || ''
+        txt:this.item.value || '',
+        select:0
       }
     },
-    props:['item'],
+    props:['item','exclu'],
     mounted(){
       this.msg = getExpStr(this.item.name);
+      this.select = this.item.select;
     },
     methods:{
       changeVal(e){
@@ -34,20 +39,24 @@ import { getExpStr } from '@utils/tools';
       },
       handleBlur(){
         // 如果该项未选中,则不存值
-      const select = this.item.select;
-      if(!select){return}
+      // const select = this.item.select;
+      // if(!select){return}
       const newData = Object.assign({},this.part,{value:this.txt});
       this.$emit("updata",newData);
       this.$emit('handleInp',this.txt);
       },
       preClick(e){
         e.stopPropagation();
+      },
+      handleCli(e){
+        scrollToV(e)
       }
     },
     watch:{
       item:{//清空时更新
         handler(newVal,oldVal){
           this.txt = newVal.value;
+          this.select = newVal.select;
         },
         deep:true
       }
@@ -72,5 +81,8 @@ import { getExpStr } from '@utils/tools';
     .check{
       color: #4F50FF;
     }
+    .exclu{
+      color:#e6e7e9 !important;
+    }
   }
-</style>
+</style>

+ 22 - 2
src/common/Radio.vue

@@ -48,7 +48,15 @@ import OptionInp from '../common/OptionInp.vue';
           data[i].select = 0
           if(i==index){
             data[i].select = 1;
-            value = data[i].name;
+            // value = data[i].name;
+            // 选中该项时,带的输入框内有值则加上
+            if(data[i].value){
+              let newVal = '#{' + data[i].value + '}';
+              let str = data[i].name.replace(patt,newVal);
+              value = str ;
+            }else{
+              value = data[i].name ;
+            }
           }
         }
         const newData = Object.assign({},this.datas,{questionDetailList:data},{value:value})
@@ -56,11 +64,23 @@ import OptionInp from '../common/OptionInp.vue';
       },
       inpVal(val,index){//输入框失焦处理
         let valueStr = this.datas.value;
-        if(valueStr){
+        /*if(valueStr){
           // let patt = /\$\{[^\]]+\}/g;
           let newVal =  val;//修改时替换值用
           const str = valueStr.replace(patt,newVal);
           this.datas.value = str;
+        }*/
+        if(valueStr){
+          let rePatt = /\#\{[^\]]+\}/g;
+          let newVal = '#{' +val+'}';
+          let str = "";
+          // 区分第一次输入还是修改
+          if(valueStr.indexOf("${") !== -1){
+            str = valueStr.replace(patt,newVal);
+          }else{//修改
+            str = valueStr.replace(rePatt,newVal);
+          }
+          this.datas.value = str;
         }
         
         // 输入框回读

+ 16 - 2
src/common/UploadImg.vue

@@ -13,7 +13,6 @@
             @change="addImg"
             accept="image/*"
             ref="inp"
-            multiple
             style="display:none"
           />
           <img src="../images/upload.png">
@@ -54,6 +53,13 @@ export default {
   },
   methods: {
     handleUpload() {
+      // navigator.getUserMedia({video: true,audio:true}, function onSuccess(stream) {
+      /*navigator.getUserMedia({video: true}, function onSuccess(stream) {
+        const inp = this.$refs.inp;
+        inp.click();
+      }, function onError(error) {
+        alert("请开启权限设置")
+      })*/
       const inp = this.$refs.inp;
       inp.click();
     },
@@ -68,10 +74,11 @@ export default {
     addImg() {
       // 上传图片进行压缩,压缩后超过4M则不允许上传
       let fileTag = this.$refs.inp;
-      let img = this.$refs.img;
+      // let img = this.$refs.img;
       let file = fileTag.files[0];
       const that = this;
       this.imgBase64(file, function (image, canvas) {
+        console.log("图片宽:",image.naturalWidth,"图片高度:",image.naturalHeight)
         var maxSize = 4 * 1024; // 4M
         var fileSize = file.size / 1024; //kb 图片大小
         var uploadSrc;
@@ -98,6 +105,8 @@ export default {
           that.$store.commit('setImgSrc', { key: key, src: uploadSrc, type: that.moduleType })
           that.$previewRefresh(); //异步获取的图片需要刷新下
         }
+        // that.$refs.inp.value = '';
+        fileTag.value = '';
       });
     },
     imgBase64(file, callback) {
@@ -210,8 +219,13 @@ export default {
       height: 100%;
       overflow: hidden;
       border-radius: 0.08rem;
+      position: relative;
       .img {
         width: 100%;
+        position: absolute;
+        left: 50%;
+        top: 50%;
+        transform: translate(-50%,-50%);
       }
     }
   }

+ 1 - 12
src/components/AddContent.vue

@@ -147,17 +147,6 @@ export default {
   
 .result{
   margin-bottom: .3rem;
-  .title{
-    color: #4F50FF;
-    padding-left: .1rem;
-    border-left: .08rem solid #4F50FF;
-    margin-bottom: .19rem;
-    font-weight: 700;
-  }
-  p{
-    color: #666;
-    line-height: .44rem;
-  }
 }
 .thanks {
   font-size: .28rem /* 28/100 */;
@@ -169,4 +158,4 @@ export default {
 .label{
   .label;
 }
-</style>
+</style>

+ 36 - 2
src/components/Detail.vue

@@ -57,6 +57,17 @@ import {patt} from '@utils/tools.js'
             mapping.splice(i,1,data)
           }
         }
+        // 实时更新清空样式
+        if(data.value){
+          this.$emit('check',true)
+        }else{
+          let flag = this.check();
+          if(flag){
+            this.$emit('check',true)
+          }else{
+            this.$emit('check',false)
+          }
+        }
       },
       saveData(){//存值
         this.finished = true;
@@ -76,10 +87,11 @@ import {patt} from '@utils/tools.js'
         }else{
           newMsg = msg
         }
-
         this.$store.commit('setDatas',{data:this.checkDatas,pId:this.checkDatas.id,type:this.type,ppId:this.ppId});
         // flag是区分点开已选症状 未点完成
-        this.$store.commit('setText',{text:newMsg.replace(patt,''),pId:this.checkDatas.id,type:this.type,flag:true});
+        // this.$store.commit('setText',{text:newMsg.replace(patt,''),pId:this.checkDatas.id,type:this.type,flag:true});
+        // 输入框的值用占位符#{}标识,便于修改
+        this.$store.commit('setText',{text:newMsg.replace(patt,'').replace(/\#\{/g,'').replace(/\}/g,''),pId:this.checkDatas.id,type:this.type,flag:true});
       },
       clearData(){//清空
         const datas = this.checkDatas.questionMapping;
@@ -99,6 +111,28 @@ import {patt} from '@utils/tools.js'
         let msg = this.checkDatas.name;
         this.$store.commit('setDatas',{data:this.checkDatas,pId:this.checkDatas.id,type:this.type,ppId:this.ppId});
         this.$store.commit('setText',{text:msg,pId:this.checkDatas.id,type:this.type,flag:true});
+      },
+      check(){// 校验是否有已填项
+        const datas = this.checkDatas.questionMapping;
+        let checkArr = [];
+        for(let i in datas){
+          if(datas[i].value){
+            checkArr.push(datas[i]);
+          }
+          let detaiList = datas[i].questionDetailList;
+          if(detaiList.length>0){
+            for(let k in detaiList){
+              if(detaiList[k].select == 1){
+                checkArr.push(detaiList[k]);
+              }
+            }
+          }
+        }
+
+        if(checkArr.length>0){
+          return true;
+        }
+        return false;
       }
     },
   }

+ 28 - 5
src/components/DetailBox.vue

@@ -4,15 +4,16 @@
       <span class="icon" @click="close">
         <img src="../images/small-close.png">
       </span>
-      <span class="name">{{privateData.name+'详情'}}</span>
-      <span @click="handleClear">清空</span>
+      <span class="name">{{(privateData.description ||privateData.name)+'详情'}}</span>
+      <span @click="handleClear" :class="{'check':checkF}">清空</span>
       <i>{{tips}}</i>
     </div>
     <div class="main">
       <Detail :datas="privateData" 
               ref="detail"
               :type="moduleType" 
-              :ppId="ppId"/>
+              :ppId="ppId"
+              @check="changeCheck($event)"/>
     </div>
     <div class="foot" @click="complete">完成</div>
     <Toast :message="clearTxt" 
@@ -24,6 +25,8 @@
 <script type="text/javascript">
   import Detail from './Detail.vue';
   import Toast from '../common/Toast.vue';
+  import {fixedKeyboard} from '@utils/tools.js';
+  import $ from 'jquery';
   export default {
     name:'DetailBox', //点开详情的盒子
     data(){
@@ -33,7 +36,8 @@
         compFlag:false,
         clearTxt:"是否清空当前已选内容?",
         showToast:false,
-        tips:"(请完成病情预问诊可让医生提前了解病情)"
+        tips:"(请完成病情预问诊可让医生提前了解病情)",
+        checkF:false //详情页有无已选项标识
       }
     },
     created(){
@@ -43,6 +47,16 @@
       const box = this.$refs.detailBox;
       const height = document.documentElement.clientHeight;
       box.style.height = height - 45 + 'px'; 
+      // 校验是否有已填项,有--弹窗;无--return
+      let hasCheck = this.$refs.detail.check();
+      if(hasCheck){
+        this.checkF = true;
+      }
+      fixedKeyboard();//给Window绑定事件
+    },
+    beforeDestroy(){//给Window解绑事件
+      $(window).off("resize");
+      $(window).off("click");
     },
     methods:{
       close(){
@@ -52,8 +66,14 @@
         this.$refs.detail.saveData();
         this.$emit("pComplete");
       },
+      changeCheck(flag){
+        this.checkF = flag;
+      },
       handleClear(){//清空
-        this.showToast = true;
+        // 校验是否有已填项,有--弹窗;无--return
+        if(this.checkF){
+          this.showToast = true;
+        }  
       },
       cancelDel(){
         this.showToast = false;
@@ -139,6 +159,9 @@
       font-size: .32rem;
       background: linear-gradient(-270deg, #4F4FFF,#4F8BFF); */
     }
+    .check{
+      color: #1A1A1A;
+    }
   }
   @keyframes wave {
     0%   {top:100% ;}

+ 3 - 13
src/components/DiagTreat.vue

@@ -43,7 +43,7 @@
 
     <div class="foot" v-if="modluesLen==2">
       <span class="back" @click="beBack">{{'返回'+ preName}}</span>
-      <span class="next" @click="toNext">{{'预览'}}</span>
+      <span class="next" @click="toNext">{{'预览并提交病历'}}</span>
     </div>
     <div class="foot" v-else>
       <span class="back" @click="beBack">{{'返回'+ preName}}</span>
@@ -166,17 +166,7 @@
       } */
     }
     .result{
-      .title{
-        color: #4F50FF;
-        padding-left: .1rem;
-        border-left: .08rem solid #4F50FF;
-        margin-bottom: .19rem;
-        font-weight: 700;
-      }
-      p{
-        color: #666;
-        line-height: .44rem;
-      }
+      .result;
     }
   }
   .foot{
@@ -190,4 +180,4 @@
 .footer{
   .footer;
 }
-</style>
+</style>

+ 3 - 13
src/components/Others.vue

@@ -47,7 +47,7 @@
     </div>
     <div class="foot" v-if="modluesLen==3&&!nextName||modluesLen==2">
       <span class="back" @click="beBack">{{'返回'+ preName}}</span>
-      <span class="next" @click="toNext">{{'预览'}}</span>
+      <span class="next" @click="toNext">{{'预览并提交病历'}}</span>
     </div>
     <div class="foot" v-else>
       <span class="back" @click="beBack">{{'返回'+ preName}}</span>
@@ -174,17 +174,7 @@
       .label;
     }
     .result{
-      .title{
-        color: #4F50FF;
-        padding-left: .1rem;
-        border-left: .08rem solid #4F50FF;
-        margin-bottom: .19rem;
-        font-weight: 700;
-      }
-      p{
-        color: #666;
-        line-height: .44rem;
-      }
+      .result;
     }
   }
   .foot{
@@ -195,4 +185,4 @@
     z-index: 66;
   }
   
-</style>
+</style>

+ 53 - 13
src/components/PathInfo.vue

@@ -7,7 +7,25 @@
         <span>{{pathInfo.patientSex}}</span>|
         <span>{{pathInfo.patientAge}}岁</span>
       </p>
+      <p>
+        <span>挂号科室:</span>
+        <span>{{pathInfo.selfDeptName}}</span>
+      </p>
       <div class="dept">
+        <p>
+          <span>门诊号:</span>
+          <span>{{pathInfo.recordId}}</span>
+        </p>
+        <p>
+          <span>预约医生:</span>
+          <span>{{pathInfo.doctorName}}</span>
+        </p>
+      </div>
+      <p>
+        <span>预约时间:</span>
+        <span>{{pathInfo.systemTime}}</span>
+      </p>
+      <!-- <div class="dept">
         <p>
           <span>挂号科室:</span>
           <span>{{pathInfo.selfDeptName}}</span>
@@ -26,7 +44,7 @@
           <span>预约时间:</span>
           <span>{{pathInfo.systemTime}}</span>
         </p>
-      </div>
+      </div> -->
       <p class="already" v-if="type !== 1">{{text[type]}}</p>
     </div>
     <div class="out-box">
@@ -41,7 +59,7 @@
         </div>
         <!-- <p v-if="type==3">您已完成过一次预问诊,是否再次录入</p> -->
       </div>
-      <div class="child" v-if="child.length>0&&child[0].value==1">
+      <div class="child" v-if="child.length>0&&child[0].value==1 && !hideChild">
         <div class="baner">
           <p>{{pathInfo.hospitalName}}</p>
           <p class="big">儿童体质检测</p>
@@ -66,10 +84,12 @@
         type:null, //1-未做过;3-只做过问诊;4-只做过体质辨识;6-都做过
         text:{
           "3":'您已完成过一次预问诊,是否再次录入',
-          "4":'您已完成过一次儿童体质辨识,是否再次录入',
-          "6":'您已完成过一次预问诊和儿童体质辨识,是否再次录入',
+          // "4":'您已完成过一次儿童体质辨识,是否再次录入',
+          // "6":'您已完成过一次预问诊和儿童体质辨识,是否再次录入',
+          "6":'您已完成过一次预问诊,是否再次录入',
         },
-        isReady:false
+        isReady:false,
+        hideChild:true  //隐藏儿童
       }
     },
     created(){
@@ -156,7 +176,7 @@
 </script>
 <style lang="less" scoped>
   .path-wrap{
-    padding-top: .7rem;
+    padding-top: .5rem;
     font-size: .28rem;
     box-sizing: border-box;
     .info{
@@ -169,6 +189,10 @@
     .con{
       margin-left: .6rem;
       position: relative;
+      >p{
+        color: #7C828E;
+        margin-top: .27rem;
+      }
       .name{
         color: #7C828E;
         margin-top: .27rem;
@@ -176,9 +200,22 @@
           margin-right: .08rem;
         }
       }
-      .dept,.doct{
+      .dept{
+        p{
+          display: inline-block;
+          margin-top: .27rem;
+          span{
+            color: #7C828E;
+          }
+        }
+        p:first-child{
+          margin-right: .25rem;
+        }
+      }
+      /* .dept,.doct{
         display: inline-block;
         p{
+          display: inline-block;
           margin-top: .27rem;
           span{
             color: #7C828E;
@@ -187,7 +224,7 @@
       }
       .doct{
         margin-left: .26rem;
-      }
+      } */
       .already{
         position: absolute;
         left: 0;
@@ -200,6 +237,7 @@
       overflow-x: auto;
       padding:0 .15rem .15rem 0;
       -webkit-overflow-scrolling: touch;  
+      text-align: center;//隐藏儿童
     }
     .emery,.child{
       display: inline-block;
@@ -207,7 +245,7 @@
       // width:5.3rem;
       width:5.1rem;
       margin-top: .91rem;
-      margin-left: .6rem;
+      // margin-left: .6rem;
       box-sizing: border-box;
       .baner{
         box-sizing: border-box;
@@ -215,7 +253,7 @@
         // height: 2.52rem;
         height: 2.3rem;
         // padding: .66rem 0 0 .6rem;
-        padding: .5rem 0 0 .6rem;
+        padding-top: .5rem;
         p{
           color:#fff;
         }
@@ -236,19 +274,21 @@
           font-size: .24rem;
           line-height: .5rem;
           white-space: normal;
+          min-height: 100px;
         }
         button{
           width: 4rem;
           height: .88rem;
           color: #fff;
           font-size: .32rem;
-          margin-top: .20rem;
+          // margin-top: .20rem;
+          margin: .40rem 0 0 -.05rem;
           background: -webkit-gradient(linear, right top, left top, from(#4F8BFF), to(#4F4FFF));
           background: -webkit-linear-gradient(right, #4F8BFF, #4F4FFF);
           box-shadow: 0 .12rem .24rem 0 rgba(79,129,255,0.40);
           border-radius: .44rem;
-          position: absolute;
-          bottom: .7rem;
+          // position: absolute;
+          // bottom: .7rem;
         }
       }
     }

+ 19 - 19
src/components/Symptom.vue

@@ -11,7 +11,7 @@
       >
         <span @click="showChecked(v)">{{v.name}}</span>
         <span @click="deletSymp(v,i)"><img
-            src="../images/delete.png"
+            src="../images/del.png"
             alt=""
           ></span>
       </p>
@@ -44,7 +44,7 @@
     <div v-if="modluesLen==1"
       :class="['footer',{'nofoot':chooseSymp.length==0}]"
       @click="toNext"
-    >预览</div>
+    >预览并提交病历</div>
     <div
       class="detail"
       v-if="show"
@@ -228,9 +228,10 @@ export default {
     },
     comfirnDel() {
       this.chooseSymp.splice(this.delIndex, 1);
-      // delete(this.checkText[this.questId]);
       this.checkText.splice(this.delIndex, 1);
       this.$store.commit('delText', { type: moduleCP['symp'], pId: this.questId })
+      // 删除setDatas数据,防止回读
+      this.$store.commit('setDatas', { type: moduleCP['symp'], pId: this.questId ,data:''})
       // 删除完-常见;其他-推送
       if (this.chooseSymp.length > 0) {
         const sympText = this.getSympText();
@@ -285,6 +286,7 @@ export default {
     color: #000;
     margin-bottom: 0.36rem;
     font-weight: 700;
+    padding-right: .3rem;
     .searchImg {
       width: 0.44rem;
       height: 0.44rem;
@@ -296,34 +298,42 @@ export default {
   padding-bottom: .2rem;
   .choo-symp{
       display: inline-block;
-      width:1.9rem;
+      min-width:1.9rem;
+      // min-width:1.42rem;
       height: .74rem;
       // background: linear-gradient(-270deg, #4F4FFF, #4F8BFF);
       background: linear-gradient(-270deg, #3638EE, #4E72FF);
       box-shadow: 0 .08rem .16rem 0 rgba(79,129,255,0.40);
       border-radius: .08rem;
       white-space: nowrap;
-      margin: 0 .3rem .3rem 0;
+      // margin: 0 .3rem .3rem 0;
+      margin: 0 .25rem .3rem 0;
       span{
         display: inline-block;
         vertical-align: top;
       }
       span:first-child{
-        min-width:1.34rem;
+        // min-width:1.34rem;
+        min-width:1.42rem;
         height: .74rem;
         line-height: .74rem;
         text-align: center;
         color: #fff;
       }
       img{
-        width:.56rem;
+        // width:.56rem;
+        width:.48rem;
         height: .74rem;
       }
     }
+    .choo-symp:last-child{
+      margin-right: 0;
+    }
   .label{
     .label;
   }
   .result{
+    padding-right: .3rem;
     .title{
       color: #4F50FF;
       padding-left: .1rem;
@@ -344,17 +354,7 @@ export default {
   .label;
 }
 .result{
-  .title{
-    color: #4F50FF;
-    padding-left: .1rem;
-    border-left: .08rem solid #4F50FF;
-    margin-bottom: .19rem;
-    font-weight: 700;
-  }
-  p{
-    color: #666;
-    line-height: .44rem;
-  }
+  .result;
 }
 .footer{
   .footer;
@@ -368,4 +368,4 @@ export default {
   .mask;
   z-index: 66;
 }
-</style>
+</style>

+ 2 - 1
src/components/TabPage.vue

@@ -230,7 +230,8 @@ export default {
   .content {
     font-size: 0.3rem;
     // padding: 0.45rem 0.6rem;
-    padding: 0.45rem 0.3rem 0.45rem 0.6rem;
+    // padding: 0.45rem 0.3rem 0.45rem 0.6rem;
+    padding: 0.45rem 0 0.45rem 0.3rem;
   }
 }
 </style>

二進制
src/images/del.png


+ 27 - 7
src/less/base.less

@@ -27,8 +27,11 @@
   position: fixed;
   bottom: 0;
   left: 0;
-  background: #F2F2F5;
+  // background: #F2F2F5;
+  background: #e5ecfc;
   z-index: 66;
+  display: flex;
+  justify-content: space-between;
   .back,.next{
     display: inline-block;
     height: .88rem;
@@ -37,13 +40,15 @@
     vertical-align: top;
   }
   .back{
-    width: 2.5rem;
-    color: #7C828E;
-    // background: #F2F2F5;
+    // width: 2.5rem;
+    width: 40%;
+    // color: #7C828E;
+    color: #0043E8;
   }
   .next{
     // width: 5rem;
-    width: 4.91rem;
+    // width: 4.91rem;
+    width: 58%;
     color: #fff;
     background: linear-gradient(-270deg, #4F4FFF,#4F8BFF);
   }
@@ -63,8 +68,8 @@
     border-radius: .08rem;
     text-align: center;
     color: #7C828E;
-    // margin: 0 0 .3rem .3rem;
-    margin: 0 .3rem .3rem 0;
+    // margin: 0 .3rem .3rem 0;
+    margin: 0 .25rem .3rem 0;
     padding: 0 .05rem;
     box-sizing: border-box;
   }
@@ -74,4 +79,19 @@
   .over{
     font-size: .24rem !important;
   }
+}
+
+.result{
+  padding-right: .3rem;
+  .title{
+    color: #4F50FF;
+    padding-left: .1rem;
+    border-left: .08rem solid #4F50FF;
+    margin-bottom: .19rem;
+    font-weight: 700;
+  }
+  p{
+    color: #666;
+    line-height: .44rem;
+  }
 }

+ 2 - 0
src/less/index.less

@@ -6,6 +6,8 @@ body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, input, textarea, p, t
   color: #323232;
   // -webkit-text-size-adjust:100%;
   -webkit-text-size-adjust:auto;
+  -webkit-tap-highlight-color: rgba(0,0,0,0);
+  -webkit-tap-highlight-color: transparent;
 }
 input, textarea{
   outline: none;

+ 2 - 3
src/store.js

@@ -61,8 +61,7 @@ const store = new Vuex.Store({
       }
     },
     setDataAll(state,param){
-      // console.log(state,moduleCP['suplement'],param,1111)
-      let res = state.allMoudles;
+      let res = state.allMoudles
       for(let i = 0;i<res.length;i++){
         if(res[i].type == moduleCP['suplement']){
           res[i].moduleDetailDTOList[param.idx] = param.data
@@ -367,4 +366,4 @@ const store = new Vuex.Store({
   }
 })
 
-export default store;
+export default store;

+ 54 - 1
src/utils/tools.js

@@ -1,5 +1,6 @@
 
 const qs = require('qs');
+const $ = require('jquery');
 const imageUrlPrefix = 'http://192.168.2.241:82' //后台图片地址
 // const imageUrlPrefix = 'http://192.168.2.236:82' //后台图片地址
 
@@ -158,6 +159,56 @@ const moduleConfig = (config,modules) => {
 // 替换输入框占位符
 const patt = /\$\{[^\]]+\}/g;
 
+// 监听键盘是否弹起
+function fixedKeyboard() {
+  var win_h = $(window).height();
+  $(window).on("resize",function(){
+    if (/iphone|ipad/i.test(navigator.userAgent.toLowerCase())) {
+      //ios 什么都不用做
+    } else {
+       //安卓触发window.resize
+      if($(window).height() < win_h){
+        $('.detailBox-wrap').css('position','static') ;//详情页
+        $('.main').height((win_h)/100+'rem');
+      }else{
+        $('.detailBox-wrap').css('position','fixed');
+        // $('.main').css('height','100%;') ;
+        $('.main').height("100%") ;
+      }
+    }
+  })
+  $(window).on("click",function(){
+    const { activeElement } = document;
+    if (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA') {
+      setTimeout(() => {
+        activeElement.scrollIntoView(true);
+        let top = $('.main').scrollTop();
+        $('.main').scrollTop(top-30); //预留题目位置
+      }, 400);
+    }
+  })
+}
+
+// 移动到可视区--选项中的输入框,因阻止了冒泡
+function scrollToV(e){
+  setTimeout(function() {
+    // e.target.scrollIntoView(false);
+    e.target.scrollIntoView(true); //true--元素顶部与可视区顶部对齐;false--元素底部与可视区底部对齐
+    let mainH = $('.main').height();
+    let top = $('.main').scrollTop();
+    $('.main').scrollTop(top-30); //预留题目位置
+    /*let HH = mainH-clientY;
+    if(clientY < 210 || (mainH-clientY)>88){
+      e.target.scrollIntoView(false); //底部对齐
+    }else if(HH < 200){
+      e.target.scrollIntoView(true);//顶部对齐
+    }
+    else{
+      e.target.scrollIntoView(); 
+    }*/
+  }, 400)
+}
+
 module.exports =  {
   imageUrlPrefix,
   getUrlArgObject,
@@ -167,7 +218,9 @@ module.exports =  {
   moduleConfig,
   patt,
   moduleCP,
-  getExpStr
+  getExpStr,
+  fixedKeyboard,
+  scrollToV
 }